Rotate List

来源:互联网 发布:手机淘宝松子类目 编辑:程序博客网 时间:2024/06/05 12:01

一、问题描述

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 % size == 0 || size == 1

时不翻转链表。

三、代码

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


0 0
原创粉丝点击