Linked List - Rotate List
优质
小牛编辑
136浏览
2023-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个节点轮转到链表前面。
对于这题我们首先需要遍历链表,得到链表长度n,因为k可能大于n,所以我们需要取余处理,然后将链表串起来形成一个换,在遍历n - k % n
个节点,断开,就成了。譬如上面这个例子,k等于2,我们遍历到链表结尾之后,连接1,然后遍历 5 - 2 % 5
个字节,断开环,下一个节点就是新的链表头了。
代码如下:
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if(!head || k == 0) {
return head;
}
int n = 1;
ListNode* p = head;
//得到链表长度
while(p->next) {
p = p->next;
n++;
}
k = n - k % n;
//连接成环
p->next = head;
for(int i = 0; i < k; i++) {
p = p->next;
}
//得到新的链表头并断开环
head = p->next;
p->next = NULL;
return head;
}
};