給定一個鏈表,旋轉鏈表,將鏈表每個節點向右移動?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來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/rotate-list
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。?
解法:
/*** 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 NULL; ListNode *p = head;int len = 0;while(p){++len;p = p->next;}k = k % len;ListNode *fast = head, *slow = head;while(k--)fast = fast->next;while(fast->next){fast = fast->next;slow = slow->next;}fast->next = head;head = slow->next;slow->next = NULL;return head;}
};
?