鍊錶總結(2)

2021-09-29 04:19:31 字數 2343 閱讀 4357

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一直向前...