当前位置:   article > 正文

链表内指定区间反转(C和C++实现)_c语言 反转链表的第m到n

c语言 反转链表的第m到n

描述

将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 �(�)O(n),空间复杂度 �(1)O(1)。
例如:
给出的链表为 1→2→3→4→5→NULL, m=2,n=4,
返回 1→4→3→2→5→NULL.

数据范围: 链表长度 0<size≤1000,0<m≤n≤size,链表中每个节点的值都满足∣val∣≤1000

要求:时间复杂度O(n) ,空间复杂度O(n)

C语言实现

首先找到m位置的前一个节点和m所在节点,分别用两个指针指向。

第二步就是设立尾部节点的指针,防止最终尾部节点丢失与前后关联不上。

第三步就是单链表完全反转,这里如果有不太懂的可以去看我上一篇写的有关反转链表的部分,

反转链表链接(直接点击跳转)

最后就是将反转后的部分的头部与m的前一个节点相连,这里要注意如果前一个节点为空即m为head节点则直接让head = pPre。

  1. struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
  2. // write code here
  3. if(head == NULL || head->next ==NULL)
  4. return head;
  5. struct ListNode* q = NULL,*p = head;
  6. for(int i = 0; i < m - 1; i++) {
  7. q = p;
  8. p = p->next;
  9. }
  10. //此时p指向第m个节点,q指向m前一个节点
  11. struct ListNode* end = p;//end用来指向逆序后的尾节点
  12. struct ListNode* pPre = p,*nxt = NULL;
  13. p = p->next;
  14. //我发现单链表逆序还真是都要用三个节点去指,nxt用以指向下一个节点,p节点拿来逆序,pPre拿来指向前一个节点
  15. for(int i = m + 1; i <= n; ++i){
  16. nxt = p->next;
  17. p->next = pPre;
  18. pPre = p;
  19. p = nxt;
  20. }
  21. end->next = p;//此时的p节点指向的是第n + 1个节点
  22. if(q){//注意q节点可能为空
  23. q->next = pPre;
  24. }else{
  25. head = pPre;
  26. }
  27. return head;
  28. }

C++

  1. ListNode* reverseBetween(ListNode* head, int m, int n) {
  2. if(head == nullptr || head->next == nullptr)
  3. return head;
  4. ListNode* q = nullptr,*p = head;
  5. for(int i = 0; i < m - 1; i++) {
  6. q = p;
  7. p = p->next;
  8. }
  9. //此时p指向第m个节点,q指向m前一个节点
  10. ListNode* end = p;//end用来指向逆序后的尾节点
  11. ListNode* pPre = p,*next = nullptr;
  12. p = p->next;
  13. for(int i = m + 1; i <= n; ++i){
  14. next = p->next;
  15. p->next = pPre;
  16. pPre = p;
  17. p = next;
  18. }
  19. end->next = p;//此时的p节点指向的是第n + 1个节点
  20. if(q){//注意q节点可能为空
  21. q->next = pPre;
  22. }else{
  23. head = pPre;
  24. }
  25. return head;
  26. // write code here
  27. }

最后,写文不易,不收藏也请给个赞,谢谢亲~! 

(本文仅供学习时参考,如有错误,纯属作者技术不到位,不足之处请多指教,谢谢)

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

闽ICP备14008679号