当前位置:   article > 正文

力扣61.旋转链表(C语言)

力扣61.旋转链表(C语言)

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

示例 2:

输入:head = [0,1,2], k = 4
输出:[2,0,1]

提示:

  • 链表中节点的数目在范围 [0, 500] 内
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

题解:

  本题主要思路是将其看成一个环:当K值大于链表长度len时,K=K%len,当K值等于len时,来你表不做处理,当K值小于len时,链表在len-K出断开。

代码

  1. struct ListNode* rotateRight(struct ListNode* head, int k) {
  2. if(head==NULL)
  3. {
  4. return NULL;
  5. }
  6. if(head->next==NULL)
  7. {
  8. return head;
  9. }
  10. int len = 1;
  11. struct ListNode*pmove = head;
  12. struct ListNode*pre = head;
  13. while(head->next!=NULL)
  14. {
  15. len++;
  16. head = head->next;
  17. }
  18. head = pmove;
  19. for(int i = 0;i<(len-(k%len)-1);i++)
  20. {
  21. head = head->next;
  22. }
  23. pmove = head;
  24. for(int j = 0;j<(k%len);j++)
  25. {
  26. pmove = pmove->next;
  27. }
  28. pmove->next = pre;
  29. pmove=head->next ;
  30. head->next = NULL;
  31. return pmove;
  32. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52787
推荐阅读
相关标签
  

闽ICP备14008679号