給定乙個鍊錶和兩個整數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個節點...