rotate-list 旋转部分链表
Posted zl1991
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rotate-list 旋转部分链表相关的知识,希望对你有一定的参考价值。
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given1->2->3->4->5->NULLand k =2,
return4->5->1->2->3->NULL.
题目;给定一个链表,将链表旋转到右边的k个位置,其中k是非负的。
例如:
1->2->3->4->5->NULL,为K = 2,
返还4->5->1->2->3->NULL。
分析:先遍历一遍,得出链表长度len,注意k可能会大于len,因此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; } };
以上是关于rotate-list 旋转部分链表的主要内容,如果未能解决你的问题,请参考以下文章