LeetCode-61. Rotate List

来源:互联网 发布:淘宝助理使用教程视频 编辑:程序博客网 时间:2024/06/05 18:14

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.


需要考虑的边界情况:

(1)空链表直接返回NULL;

(2)链表长度等于k时、小于k时,对k的处理。


思路:首先遍历链表得链表的长度,再通过快慢指针找到新表头,具体做法是先让快指针走k歩,再让两指针同时走直到快指针走到最后一位。此时慢指针的后继指针指向的就是新头指针。

class Solution {public:    ListNode *rotateRight(ListNode *head, int k) {        if(head==NULL) return head;        int len=0;        ListNode *node=head;        while(node!=NULL){            len++;            node=node->next;        }        k=k%len;        if(k==0) return head;        ListNode *fast=head;        ListNode *slow=head;        for(int i=0;i<k;++i){            fast=fast->next;        }        while(fast->next!=NULL){            fast=fast->next;            slow=slow->next;        }        fast->next=head;        head=slow->next;        slow->next=NULL;        return head;    }};


原创粉丝点击