0
点赞
收藏
分享

微信扫一扫

旋转链表

程序员伟杰 2022-01-31 阅读 30

1.遇到链表题我们首先画图

如图所示我们旋转k个点,其实就是把后面k个点移到了前面,

2.画出被改变节点所连接的前后的边。以及找出我们需要用的点。

从这里看出我们需要第n-k个点和n-k+1的点,和最后一个点,

如图所示

ok之后我们就开始做题了

步骤:

1.先判断head,k是否为空;

2.求链表的长度,以及尾节点

3.求出第n-k个节点

4.改变他们的指向位置

class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
      if(!head)return head;
      int n=0;
      ListNode*tail;
      for(auto p=head;p;p=p->next){
          tail=p;
          n++;
      }
      k%=n;
      if(!k)return head;
      auto p=head;
      for(int i=0;i<n-k-1;i++)p=p->next;
      tail->next=head;
      head=p->next;
      p->next=nullptr;
      return head;
 }
};
举报

相关推荐

0 条评论