例題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...