Leetcode Rotate List

来源:互联网 发布:淘宝首页流量 编辑:程序博客网 时间:2024/06/08 01:58

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.


创建一个哨兵节点phead,pthread->next=head,第一次遍历求出链表的长度len以及链表的最后节点tail,k=k%len,通过第二次遍历找到前半段的最后一个节点curr。如果curr==tail,那么说明k%len为0,只需返回head;否则phead->next = tail,tail->next=curr->next;curr->next = NULL(不加的还结果为循环列表,导致leetcode判定会超时);返回pthread->next.


代码如下:

/** * 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 || head->next == NULL ||  k == 0)            return head;        ListNode* phead = new ListNode(0);        ListNode* curr= head,*tail = head;                int len =0;        while(tail->next != NULL)        {            tail = tail->next;            len++;        }        len++;                k = k%len;        if(k == 0 )            return head;                    int count = 0;        while( count < len-k-1)        {            curr = curr->next;            count++;        }                phead->next = curr->next;        curr->next = NULL;        tail->next = head;        return phead->next;    }};


原创粉丝点击