[LeetCode] Rotate Linked List

来源:互联网 发布:保定网络托管 编辑:程序博客网 时间:2024/05/21 17:29

Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given 1->2->3->4->5->NULL and k = 2, return 4->5->1->2->3->NULL.

Analysis:
The idea is to get the whole length of the list, then compute the rotate position.
And cut the list from the rotate position, link the front part to the last part.

e.g.
1->2->3->4->5->null , k =2;
len = 5;
rotate pos = 5-2 = 3;

cut list:  1->2->3  --->  4->5->null
link :     4->5->1->2->3->null

    ListNode *rotateRight(ListNode *head, int k) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if (head==NULL || k==0) {return head;}                 ListNode* p = head;        int len=0;        //get total length         while (p!=NULL){            len++;            p=p->next;        }        //get rotate position        int r;        if (k%len==0){            return head;        }else{            r = len-(k%len)-1;            }        p=head;        while (r>0){            p=p->next;            r--;        }                          //cut current list, link the back to the front        ListNode *q =p->next;        if (q==NULL){return head;}        while (q->next!=NULL){            q=q->next;        }        q->next = head;        q=p->next;        p->next=NULL;                 return q;    }


0 0
原创粉丝点击