如何將單鏈表向右旋轉k個位置。
給定單鏈表1->2->3->4->5->6->7, k = 3,那麼旋轉後的單鏈表變為5->6->7->1->2->3->4
public
class
sort
// 前部分有k+1個結點,後半部分有k個結點
// 所以使用快慢指標移動是可以的,之間維持k個結點
node slow, fast, tmp;
slow = fast = head.next;
// 1.先將fast移動到第k個位置
for(
int i =
1; i <= k; i++
)else
}// 2.slow和fast同步移動,fast移動到尾結點時,slow正好
while
(fast.next != null)
// 3.開始連線結點
tmp = slow.next;
slow.next = null;
fast.next = head.next;
head.next = tmp;
}public
static
void
main
(string[
] args)
// 向右旋轉
rightrotate
(head,3)
;for
(cur = head.next; cur != null; cur = cur.next)
}}
1.首先找到鍊錶的倒數第k+1個結點slow和尾巴結點fast
2.將鍊錶斷開成兩個子鍊錶,其中後半部分的子鍊錶的結點個數為k
將單鏈表的每K個結點逆序
簡單做法,直接使用棧儲存那k個結點,然後將這k個結點逆序後連線到鍊錶上去,只需要注意頭節點即可。高階解法直接對鍊錶進行處理,每一次記錄當前逆序分組的第乙個結點和最後乙個結點,也需要考慮頭節點 解法 使用棧 直接對鍊錶進行迭代 普通 public static node reverseknode1 n...
查詢單鏈表的第k個結點
題目 輸入乙個單向鍊錶,輸出該鍊錶中倒數第 k個結點。鍊錶的倒數第 0個結點為鍊錶的尾指標。鍊錶結點定義如下 struct listnode 解析 方案一 可以對單鏈表來個逆置,然後再取逆置後的單鏈表的第k個元素。但是這樣,在逆置的過程中涉及到大量的插入和刪除的工作,實為不佳的方案。方案二 可以先求...
刪除單鏈表倒數第k個結點
在資料結構這一方面,鍊錶這塊容易搞混的是它的指標。下面的演算法為刪除單鏈表倒數第k個結點,所有的步驟解析都在 裡說明了。刪除單鏈表的倒數第 k個結點.結點定義 classnode public classremotelastedkthnode node node head 遍歷一遍鍊錶,得到 k 最...