没腿的鸟 发表于 2025-2-24 18:43:06

算法与数据结构(旋转链表)

题目

https://i-blog.csdnimg.cn/direct/b7eca4dedd54448e96a11a057f99be6a.png
思绪

每个节点向右移动k个位置,其实就是从头开始遍历,将n-k个节点顺序插入到链表的尾部。
https://i-blog.csdnimg.cn/direct/11642000d78449d5b0051ca75386287b.png
如上图所示的示例1,先将1插入到5的后面,再将2插入到1的后面,最后将3插入到2的后面即可。
代码详解

定义一个cur变量用来遍历到最后一个节点,方便后面的插入,a为移动节点的个数,iter变量从头开始遍历,将每个节点不断地今后插入。插入完毕后,将最后一个节点的next指向空即可。
iter即为新链表的头结点
代码

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
      if(head==nullptr || head->next==nullptr)
            return head;
      ListNode* cur = head;
      int n = 1;
      while(cur->next)
      {
            n++;
            cur = cur->next;
      }
      int a = n - k%n;
      ListNode* iter = head;
      while(a--)
      {
            cur->next = iter;
            cur = iter;
            iter = iter->next;
      }
      cur->next = nullptr;
      return iter;
    }
};

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 算法与数据结构(旋转链表)