Fork me on GitHub

[leetcode-61-Rotate List]

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.

思路:

首先求出list的长度length,然后将最后一个结点指向初始的头结点,

然后从该初始结点出发,指针向后移动length-k次,

找到新链表的尾结点,然后把它的next置为NULL。

ListNode* rotateRight(ListNode* head, int k)
    {
        ListNode* result;
        if (k == 0 || head == NULL) return head;
        int length = 1;
        ListNode* temp = head;
        while (head != NULL && head->next != NULL)
        {
            head = head->next;
            length++;
        }
        k %= length;
        head->next = temp;//head 目前为最后一个结点的指针 指向初始时候的头部结点
        for (int i = 0; i < length - k-1;i++)
        {
            temp = temp->next;
        }
         result = temp->next;
        temp->next = NULL;
        return result;
    }

 

posted @ 2017-04-06 16:36  hellowOOOrld  阅读(161)  评论(0编辑  收藏  举报