[LeetCode] Rotate List

来源:互联网 发布:ipad免费笔记软件 编辑:程序博客网 时间:2024/06/14 10:08

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.

解法:游标指针从头节点向后移动,当指向尾节点时,得到链表长度len,同时将链表头尾相连,接着游标再向后移动 len - k%len 步得到结果链表的尾节点。

/** * 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) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        if(head)        {            ListNode *p = head;            int len =1;            while(p -> next)            {                p = p -> next;                len++;            }            p -> next = head;            k %= len;            int move = len - k;            while (move > 0)            {                p = p -> next;                move--;            }            head = p -> next;            p -> next = NULL;        }        return head;    }};