给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
示例 2:
关键是找到旋转后哪个点成为头节点(将其返回),哪个点成为尾节点,将其next指针设为NULL
示例2相当于给了一点提示:当循环移动位数等于链表长度的整数倍时,链表不变。
#include<cstdlib>
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if(k == 0 || head == NULL || head->next == NULL)
return head;
ListNode *temp = head, *first = NULL, *pre = NULL;
int size = 0, count = 0, newk;
while(temp != NULL)
{
pre = temp;
size++;
temp = temp->next;
}
pre->next = head;
newk = k % size;
temp = head;
count = 1;
while(count < size-newk)
{
count++;
temp = temp->next;
}
first = temp->next;
temp->next = NULL;
return first;
}
};
啊,这么慢................. 但是代码不变再提交一次,提升这么多,这个时间还有参考价值吗.........??
还有就是,算出来newk之后可以再判断一次 == 0? 若是直接返回head。
扫描二维码关注公众号,回复:
2178324 查看本文章
但是提交代码时显示 超时,不懂........