leetcoed 61. 旋转链表
来源:5-6 链表与双指针 Remove Nth Node Form End of List
高斯的盾
2020-05-28
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
麻烦老师花点时间帮忙看看
//我的思路是每次操作将链表最后一个节点与头节点交换,循环k次
//我的代码当k=1时运行成功,其他时候则失败,下面是巡行结果
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
ListNode* dummyHead=new ListNode(-1);
dummyHead->next=head;
for(int i=0;i<k;i++){
ListNode* pre=dummyHead;
while(pre->next->next!=NULL){
pre=pre->next;//pre是最后一个节点的前一个结点,之所以k次中每一次都找到新链表中的最后一个节点是因为我觉的每次最后一个节点都会变位置
}
ListNode* node2=pre->next;//最后一个节点,下面三行是交换操作
pre->next=NULL;
node2->next=head;
dummyHead->next=node2;
}
ListNode* ret= dummyHead->next;
delete dummyHead;
return ret;
}
};
写回答
1回答
-
如果我没有理解错,你的程序的问题可以在小数据量下稳定复现。
课程中介绍了如何创建一个链表,来测试自己的程序。创建一个只包含 3 个数据的量表,选择 k = 2,实际单步跟踪一下,看看你的程序每一步变量中存储的都是什么?在哪里出错了?
debug 是计算机专业的基本功,也是训练自己编程思维,提高算法能力的重要方式,进步就在这个过程中哦。
如果 debug 到某一步,对程序的执行方式不理解,比如你觉得应该输出什么,实际却输出了什么,你不理解,可以再来问答区提问。请谅解,我无法做到所有同学编程除了 bug,把程序扔到问答区,就能自动调 bug,这不是问答区设立的目的。我也确实无法做到这一点。问答区是解答疑问的,不是调 bug 的。请谅解。
如果你需要参考代码,可以参考我的 Leetcode 题解代码仓:https://github.com/liuyubobobo/Play-Leetcode
继续加油!:)
232020-05-30
相似问题