【LeetCode】61. 旋轉連結串列
阿新 • • 發佈:2018-12-16
題目描述
給定一個連結串列,旋轉連結串列,將連結串列每個節點向右移動 k 個位置,其中 k 是非負數。
示例
輸入: 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
解決方法
首先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) {
//首先k對連結串列長度取模,然後再進行處理
if (!head || !head->next) return head;
int len=0; //計算連結串列長度
ListNode *l1=head;
while(l1){
len++;
l1=l1->next;
}
k%=len;
if (k==0) return head;
ListNode *ans=head;
int n=len-k-1;
while(n--) ans=ans->next;
ListNode *temp=ans;
ans=ans->next;
temp->next=NULL;
ListNode *result=ans;
while(ans->next) ans=ans->next;
cout<< ans->val;
ans->next=head;
return result;
}
};