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个节点,然后反转即可
/**
* 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
原文地址:http://blog.csdn.net/harryhuang1990/article/details/26822243