您的位置:首页 > 其它

LeedCode:Rotate List

2015-07-22 09:07 211 查看
给定一个单链表,从后向前翻转K个节点,K是一个非负整数;

例如:1->2->3->4->5, k = 2;

则返回:4->5->1->2->3

分析:先遍历一遍,得出链表的长度len,注意K可能大于len,因此令k = k % len;将尾节点next指针指向首节点,形成一个环,接着往后跑len - 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 ==nullptr || k ==0) return head;

int len = 1;

ListNode *p = head;

while(p->next){

len ++;

p = p->next;//

}

k = len - k % len;

p->next = head;

for(int step = 0;step < k;step++){

p = p->next;

}

head = p->next;

p->next = nullptr;

return head;

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: