给定一个链表,旋转链表,将链表每个节点向右移动 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;
}
};