Rotate List

来源:互联网 发布:量子力学知乎 编辑:程序博客网 时间:2024/06/02 03:21
class Solution {public:    ListNode *rotateRight(ListNode *head, int k) {        if(head == NULL || k == 0)  return head;                ListNode dummy(-1);        dummy.next = head;        ListNode *slow = &dummy, *fast = &dummy;        for(int i=0; i<k; ++i)        {            if(fast->next == NULL) fast = head;            else fast = fast->next;        }        while(fast->next)        {            slow = slow->next;            fast = fast->next;        }                ListNode *newhead = slow->next;        slow->next = NULL;        //here, if dummy.next is replaced with head, then        //there may be circle formed. i.e. {1,2} k=2        fast->next = dummy.next;        return newhead;    }};

8.28最新代码:先求len,因为k有可能大于len,因此需要k%len。首尾相连,然后再往后跑len-k步。

class Solution {public:    ListNode *rotateRight(ListNode *head, int k) {        if(head == NULL || head->next == NULL || k == 0)            return head;        ListNode *p = head;        int len = 1;        while(p->next)        {            p = p->next;            len++;        }        k = len - k%len;        p->next = head;                while(k--) p = p->next;                head = p->next;        p->next = NULL;        return head;    }};

0 0
原创粉丝点击