leetcode 61 旋轉連結串列 c++
題目:
給定一個連結串列,旋轉連結串列,將連結串列每個節點向右移動 k 個位置,其中 k 是非負數。
示例1:
輸入: 1->2->3->4->5->NULL, k = 2
輸出: 4->5->1->2->3->NULL
解釋:
向右旋轉 1 步: 5->1->2->3->4->NULL
向右旋轉 2 步: 4->5->1->2->3->NULL
示例2:
輸入: 0->1->2->NULL, k = 4
輸出: 2->0->1->NULL
解釋:
向右旋轉 1 步: 2->0->1->NULL
向右旋轉 2 步: 1->2->0->NULL
向右旋轉 3 步: 0->1->2->NULL
向右旋轉 4 步: 2->0->1->NULL
思路:
先求出連結串列長度,同時標記連結串列的尾節點,當移動位置 k 為0或者n*len時返回原連結串列即可;當k>len時令k = k % len,然後在將尾節點和首節點相連,在len - k處斷開連結串列即可。
程式碼如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head == NULL) return head;
ListNode* p = head;
ListNode* q = head;
int len = 1;
//求出連結串列長度,指標p指向當前連結串列尾部
while(p->next){
len++;
p = p->next;
}
k %= len;
if(k == 0) return head; //當k為連結串列長度整數倍時返回原連結串列
p->next = head; //將原連結串列的尾節點與首節點連結
//尋找連結串列斷開的位置
int index = 1;
while(index < (len - k)){
index++;
q = q->next;
}
ListNode *ret = q->next;
q->next = NULL;
return ret;
}
};
相關文章
- 【Leetcode】61.旋轉連結串列LeetCode
- 61. 旋轉連結串列
- 旋轉連結串列
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- leetcode 反轉連結串列LeetCode
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- leetcode 92 反轉連結串列ⅡLeetCode
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 【C++ 資料結構:連結串列】二刷LeetCode707設計連結串列C++資料結構LeetCode
- [leetcode 92] 反轉連結串列 IILeetCode
- 反轉連結串列(C++簡單區)C++
- C++建立連結串列C++
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- LeetCode-連結串列LeetCode
- leetcode 206.反轉連結串列LeetCode
- LeetCode-092-反轉連結串列 IILeetCode
- leetcode 206. 反轉連結串列LeetCode
- leetcode206. 反轉連結串列LeetCode
- C++ STL list連結串列C++
- LeetCode連結串列專題LeetCode
- LeetCode 86 ——分隔連結串列LeetCode
- 【C++】“反轉連結串列”相關的題目C++
- 反轉連結串列
- 資料結構學習(C++)——迴圈連結串列 (轉)資料結構C++
- 資料結構學習(C++)——雙向連結串列 (轉)資料結構C++
- leetCode206 反轉連結串列ILeetCode
- [leetcode 25]. K 個一組翻轉連結串列LeetCode
- [連結串列]leetcode138-複製帶隨即指標的連結串列LeetCode指標
- 【LeetCode連結串列#9】圖解:兩兩交換連結串列節點LeetCode圖解
- c++實現單連結串列C++
- C++連結串列小冊子C++
- LeetCode 86. 分隔連結串列LeetCode
- 反轉連結串列、合併連結串列、樹的子結構
- leetcode:21. 合併兩個有序連結串列(連結串列,簡單)LeetCode
- LeetCode 25. k個一組翻轉連結串列LeetCode
- LeetCode-Python-(206)反轉連結串列LeetCodePython