1.刪除給定值的所有結點
public
void
removeallkey
(int key)
node prev =
this
.head;
node cur =
this
.head.next;
//先考慮頭結點以後的結點
while
(cur != null)
else}if
(head.data == key)
}
2.鍊錶反轉
public node reverselist()
if(head.next == null)
node prev = null;
node cur =
this
.head;
node newhead =
newnode()
;while
(cur != null)
cur.next = prev;
prev = cur;
cur = curnext;
}return newhead;
}
3.給定乙個x值,按照大小分別置於前後
public node patition
(int x)
node smallhead =
newnode(-
1);//傀儡頭結點
node smalltail = smallhead;
node bighead =
newnode(-
2); node bigtail = bighead;
node cur = head;
while
(cur != null)
else
if(cur == null)
} smalltail.next = bighead.next;
return smallhead.next;
}
4.有序鍊錶中,刪除出現重複結點
1123444566 => 235
public node deleduplication()
node newhead =
newnode(-
1); node tmp = newhead;
node cur =
this
.head;
while
(cur != null)
cur = cur.next;
tmp.next = cur;
}else
}return newhead.next;
}
5.鍊錶是否為回文
12321;123321都是
public
boolean
chkpalindrome()
node prev = null;
while
(slow != null)
while
(prev != null)
prev = prev.next;
head = head.next;
}return
true
;}
6.鍊錶中是否帶環
public
boolean
iscycle()
if(fast == slow)
}return
false
;}
7.鍊錶帶環中的環結點
public node firstcyclenode()
if(fast == slow)
} fast =
this
.head;
while
(fast != slow)
return fast;
}
8.創造乙個帶環的鍊錶
public
void
creatcycle()
cur.next =
this
.head.next.next;
}
9.給定頭結點列印鍊錶
public
void
display2
(node newhead)
system.out.
println()
;}
總結 2 鍊錶
一種鏈式訪問的資料結構,單鏈表中的資料是以結點的形式存在,每乙個結點是由資料元素和下乙個結點的儲存的位置組成。單鏈表與陣列相比的最大差別是 單鏈表的資料元素存放在記憶體空間的位址是不連續的,而陣列的資料元素存放的位址在記憶體空間中是連續的,這也是為什麼根據索引無法像陣列那樣直接就能查詢到資料元素 包...
鍊錶 鍊錶環問題總結
給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?1 如何判斷是否存在環?對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到n...
迴圈鍊錶(2)
迴圈鍊錶中,如果我們要找最後乙個元素,時間複雜度為o n 因為我們需要從第乙個開始乙個接乙個的找。那怎樣再次簡化,將時間複雜度降低呢 我們可以設定乙個尾指標 作用類似於頭指標 指向尾結點,尾結點的指標指向第乙個結點,第乙個結點的指標指向第二個結點 判斷單鏈表是否有環的兩種方法 指標p和q,p一直向前...