码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode: Rotate List [060]

时间:2014-05-25 18:20:06      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:leetcode   算法   面试   

【题目】


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.



【题意】

        给定一个链表L,和非负数K,要求把链表的后k个节点移到链表前


【思路】

       

        先将指针指向指向倒数第K个节点,然后反转即可
        注意
            1. k>链表长度的特殊情况
            2. k=链表长度的特殊情况, k=k%len, len为链表长度
            3. k=0;


【代码】

/**
 * 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 || k<=0)return head;
        int len=0;
        ListNode*p=head;
        //获得链表长度
        while(p){len++;p=p->next;}
        //更新K值,因为K有可能比链表长度大,因此需要做取余操作
        k=k%len;
        if(k==0)return head;
        //确定倒数第k个节点
        ListNode*p1=head;
        ListNode*p2=head;
        int step=0;
        //p2先向前移动k个节点
        while(step<k && p2){step++; p2=p2->next;}
        //p1,p2同时移动,直至p2移动到链表的最后一个节点,此时p1指向的是倒数第k个节点的前一个节点。
        while(p2->next){
            p2=p2->next;
            p1=p1->next;
        }
        p2->next=head;
        head=p1->next;
        p1->next=NULL;
        return head;
    }
};


LeetCode: Rotate List [060],布布扣,bubuko.com

LeetCode: Rotate List [060]

标签:leetcode   算法   面试   

原文地址:http://blog.csdn.net/harryhuang1990/article/details/26822243

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!