快慢法在單鏈表中的應用

2021-09-29 10:41:55 字數 2675 閱讀 8709

例題1和2為其他題的基礎

著重體會例題2的一段**

while (k - 1 > 0) else

}

1.給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。

如果有兩個中間結點,則返回第二個中間結點。(快慢法的簡單應用)

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

return slow;

}}

2.找到鍊錶的倒數第k個節點並輸出

public node findkthtotail

(int k)

node fast =

this

.head;

node slow =

this

.head;

while

(k -

1>0)

else

}while

(fast.next != null)

return slow;

}

3.給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。(給定的 n 保證是有效的。)

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

//快慢法找出需要刪除的節點

listnode fast = head;

listnode slow = head;

//如果要刪除最後乙個節點,需要找出該節點前乙個元素

listnode prev = slow;

while

(fast.next != null)

else

//如果slow的下乙個節點為最後乙個節點,prev不再相等於slow。prev停留在倒數第二個 //節點

if(prev.next.next != null)}if

(slow.next == null)

else

return head;

}}

4.給定乙個鍊錶,判斷鍊錶中是否有環。

/**

* definition for singly-linked list.

* class listnode

* }*/public

class

solution

listnode fast = head;

listnode slow = head;

while

(fast != null && fast.next != null)

}return

false;}

}

5.給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。()

/**

* definition for singly-linked list.

* class listnode

* }*/public

class

solution}if

(fast == null || fast.next == null)

fast = head;

while

(fast != slow)

return fast;

}}

6.給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

//得到鍊錶長度

int length =1;

listnode cur = head;

while

(cur.next != null)

//移動的位置數對鍊錶求餘,如果餘數為0,則鍊錶不移動

//此時快慢法失去意義,所以單獨討論

int tmp = k%length;

if(tmp ==0)

//快慢法找到鍊錶的新頭部(新頭部為倒數第tmp個節點)

listnode fast = head;

listnode slow = head;

while

(tmp -

1>0)

while

(fast.next != null)

//將鍊錶連成環

fast.next = head;

//將新的頭部的前乙個節點的尾巴置零

listnode newhead = slow;

while

(slow.next != newhead)

slow.next = null;

return newhead;

}}

單鏈表在集合中的應用(交 並 差)

include using namespace std define maxsize 20 define true 1 define false 0 typedef bool status status是函式的型別,其值是函f數結果狀態 typedef char elemtype elemtype型...

快慢指標在鍊錶中的應用

快慢指標指的是定義兩個指標,這兩個指標的移動速度一快一慢,以此來製造出自己想要的差值,這個差值可以讓 我們找到鍊錶上相應的結點。一般情況下,快指標的移動步長為慢指標的兩倍 利用快慢指標,我們把乙個鍊錶看成乙個跑道,假設a的速度是b的兩倍,那麼當a跑完全程後,b剛好跑一半,以 此來達到找到中間節點的目...

快慢指標在鍊錶中的應用

快慢指標也是面試中的乙個常考知識點,主要是鍊錶的問題中應用較多。設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fast先行頭到尾部為null,則為無環鏈表 程式如下 0...