LeetCode系列 翻轉鍊錶問題II

2022-04-29 17:36:12 字數 851 閱讀 8788

給定乙個鍊錶和兩個整數m, n, 翻轉鍊錶第m個節點到第n個節點(從1開始計數).

如, 給定鍊錶: 1->2->3->4->5->null, 以及 m = 2, n = 4.

返回 1->4->3->2->5->null.

假定m和n滿足約束條件: 1 ≤ m ≤ n ≤ 鍊錶長度.

注意: 不能使用額外空間, 且只能遍歷鍊錶一次.

演算法思路:

翻轉的過程可以分解成3步:

把相鄰的節點的指向關係倒置; 即 1->2<-3<-4  5->null

把第m-1個節點(1)指向第n個節點(4); 即 1->4->3->2  5->null

把第m個節點(2, 需要快取)指向第n+1個節點(5). 即 1->4->3->2->5->null

/*

* * definition for singly-linked list.

* struct listnode

* }; */

class

solution

listnode *p1;

if(m == 1

) p1=p;

else

listnode *last =p1;

listnode *p2 = p1->next;

listnode *tmp =null;

while(p2 && count last->next =tmp;

if(m == 1

) head =p1;

else

p->next =p1;

return

head;

}};

LeetCode 206 翻轉鍊錶

題目 反轉乙個單鏈表。思路1 兩種方案,遞迴和非遞迴 2 這裡用到了鍊錶的資料結構,注意資料結構的定義,包括建構函式等 3 遞迴方案 遞迴函式傳遞兩個引數,開始是頭結點和null 1 先判斷head是否為空節點,空直接返回null 2 next 儲存 head 的下個結點,head指向為空 3 此時...

leetcode 206翻轉鍊錶

題目 演算法說明 宣告兩個臨時變數tmp和prev,且初始值為null 當遍歷節點不為null則迴圈以下四步 1,將鍊錶要翻轉的當前節點的next節點儲存到tmp 2,將當前節點的next節點指向前乙個節點prev 3,更新前乙個節點prev為當前節點 4,更新遍歷的節點為tmp 解法 c語言解法 ...

leetcode25 k組翻轉鍊錶

這題可以參考206的答案,事實上,我直接把翻轉部分的 用了leetcode206官方題解上面的,只是做了一點小修改,以保證是前k個反轉 我們具體分析核心函式 reversekgroup 乙個關鍵是怎麼把這個問題分解成好幾個單獨的翻轉問題,我這裡的reverselist函式做了改動,只反轉前面k個節點...