LeetCode:Rotate List(旋转链表)

来源:互联网 发布:淘宝找同款插件 编辑:程序博客网 时间:2024/06/05 16:32
        原题: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.

        给定一个链表,保留后k个结点,将之前的结点旋转到链尾。


        解法:用双指针,慢指针与快指针之间相距k位。同时对k进行处理k%=length(list)。

                   这里的双指针可以只用一个指针替代。首先遍历一遍求得链表长度,重新计算k。然后指针从头遍历(length-k)次,重新连接链表,返回头结点。

                   时间复杂度为O(N)。

class Solution {public:    ListNode *rotateRight(ListNode *head, int k) {        if(head==NULL || k<=0)return head;int len = 1;ListNode *p = head;while(p->next){++len;p = p->next;}k %= len;p->next = head;//circle listp = head;for(int i=1;i<len-k;++i)//move (len-k-1) timesp = p->next;head = p->next;p->next = NULL;return head;    }};


0 0
原创粉丝点击