class
linkedlist
else
}//尾插法
public
void
addlast
(int data)
else
cur.next = node;}}
/** * 找到index-1位置的節點
* 返回的是index-1位置的節點的引用
* @param index
* @return
*/private node searchindex
(int index)
return cur;
}private
void
checkindex
(int index)
}public
boolean
contains
(int key)
cur = cur.next;
}return
false;}
public
intgetlength()
return count;
}// 找到插入位置前乙個結點便可實現插入
public
boolean
addindex
(int index,
int data)
//1、找到index位置的前驅
node cur =
searchindex
(index)
;//2、插入
node node =
newnode
(data)
; node.next = cur.next;
cur.next = node;
return
true;}
private node searchprev
(int key)
prev = prev.next;
}return null;
}//刪除第一次出現關鍵字為key的節點
public
void
remove
(int key)
//2、不是頭節點
node prev =
searchprev
(key)
;//刪除的值不在鍊錶範圍內
if(prev == null)
node del = prev.next;
prev.next = del.next;
}//刪除所有值為key的節點
public
void
removeallkey
(int key)
else}if
(this
.head.data == key)
}public
void
clear()
public node reverselist()
prev = cur;
cur = curnext;
}return cur;
}public
void
display2
(node newhead)
system.out.
println()
;}public
void
display()
system.out.
println()
;}public node middlenode1()
return cur;
}public node middlenode()
return slow;
}public node findkthtotail
(int k)
node fast =
this
.head;
node slow =
this
.head;
while
(k -
1>0)
else
}while
(fast.next != null)
return slow;
}/**
** @param x 基準
* @return
*/public node partition
(int x)
else
}else
else
} cur = curnext;
}//如果第乙個線段沒有資料 沒有比基準小的資料
if(beforestart == null)
beforeend.next = afterstart;
return beforestart;
}public node deleteduplication()
cur = cur.next;
tmp.next = cur;
}else
}return newhead.next;
}/**
* 1、定義兩個引用,目的:找到單鏈表的中間位置
* 2、進行翻轉,翻轉的是後半部分
* 3、乙個head從頭開始走,slow從尾巴開始走
* 4、只要發現對應的data不相同,那麼就不是回文
* @return
*///回文
public
boolean
chkpalindrome()
if(this
.head.next == null)
node fast =
this
.head;
node slow =
this
.head;
while
(fast != null && fast.next != null)
//翻轉
node p = slow.next;
while
(p != null)
}//判斷回文
while
(this
.head != slow)if(
this
.head.next == slow)
this
.head =
this
.head.next;
slow = slow.next;
}return
true;}
//創乙個環出來
public
void
createcycle()
cur.next =
this
.head.next.next;
}public
boolean
hascycle()
}return
false;}
public node detectcycle()
}if(fast == null || fast.next == null)
fast =
this
.head;
while
(fast != slow)
return fast;
}}
單鏈表習題(下)
public void display node newhead system.out.println public node deleteduplication cur cur.getnext else 此處tmp表示單鏈表的尾巴,如果未置為null,那麼列印時會出現死迴圈 tmp.setnext...
單鏈表習題整理(七)
假設有兩個按元素值遞增有序排列的線性表a和b,均以單鏈表作儲存結構,請編寫演算法將a表和b表歸併成乙個按元素值遞減有序 即非遞增有序,允許表中含有值相同的元素 排列的線性表c,並要求利用原表 即a表和b表 的結點空間構造c表 對兩個或兩個以上,結點按元素值遞增 遞減排序的單鏈表進行操作,應採用 指標...
單鏈表練習題
題目一 假設有兩個按元素值遞增有序排列的線性表 a 和 b,均以單鏈表作儲存結構,請編寫演算法將 a 表和 b 表歸併成乙個按元素值遞減有序 即非遞增有序,允許表中含有值相同的元素 排列的線性表 c,並要求利用原表 即 a 表和 b 表 的結點空間構造 c 表。演算法 誰的值小誰就先插入鍊錶c中,插...