当前位置:   article > 正文

Leetcode 92. Reverse Linked List II_数据结构 reverse linked list ii

数据结构 reverse linked list ii

92. Reverse Linked List II

    My Submissions
Total Accepted: 69858  Total Submissions: 251099  Difficulty: Medium

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

Subscribe to see which companies asked this question

Hide Tags
  Linked List
Hide Similar Problems
  (E) Reverse Linked List


和链表反转的题很类似,不过这道题指定了反转的区间,而不是全部反转。

所以我们将链表划分为三个子区间,在区间连接处连接即可。


上代码:

  1. ListNode *reverseBetween(ListNode *head, int m, int n) {
  2. if(head == NULL || head->next == NULL) return head;
  3. ListNode *q = NULL, *p = head;
  4. for (int i = 0; i < m - 1; i++)
  5. {
  6. q = p;
  7. p = p->next;
  8. }
  9. // p此时指向第m个结点
  10. ListNode *end = p;
  11. ListNode *pPre = p, *nxt = NULL;
  12. p = p->next;
  13. // m->n之间的结点逆序
  14. for (int i = m + 1; i <= n; ++i)
  15. {
  16. nxt = p->next;
  17. p->next = pPre;
  18. pPre = p;
  19. p = nxt;
  20. }
  21. // p指向原链表中第n个结点的下一个结点
  22. // end表示逆序子链表的尾结点
  23. end->next = p;
  24. // pPre指向的是逆序后的子链表头
  25. // q指向的是第m个结点前一个结点 注意有可能是NULL
  26. if (q)
  27. q->next = pPre; // 不是NULL 链接起来即可
  28. else
  29. head = pPre; // 是NULL 头结点即为子链表头
  30. return head;
  31. }


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

闽ICP备14008679号