当前位置:   article > 正文

详解反转链表_链表反转

链表反转

LeetCode链接

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

情况一:头结点为空

 情况二:链表只有一个节点

 情况三:链表多于1个节点。

 思路:让当前节点指向前一个节点。

如何才能做到当前节点指向前一个节点呢?

【第一步】定义一个为null的pre指针和cur指针指向头节点

 【第二步】让当前指针cur指向前一个指针pre;然后pre 移动到cur ,cur 移动到cur.next

temp 变量的定义就是方便cur 移动到cur.next 

 【第三步】循环移动使得链表反转,直到cur = null 最后返回pre

main 函数中链表的构建请参考

一文读懂移除链表元素_abc123mma的博客-CSDN博客

反转前后结果如下

 

代码实现

  1. public class ReverseList {
  2. public static void main(String[] args) {
  3. ListNode node1 = new ListNode(1);
  4. ListNode node2 = new ListNode(2);
  5. ListNode node3 = new ListNode(3);
  6. ListNode node4 = new ListNode(4);
  7. ListNode node5 = new ListNode(5);
  8. node1.next = node2;
  9. node2.next = node3;
  10. node3.next = node4;
  11. node4.next = node5;
  12. System.out.println("=========反转前=========");
  13. print(node1);
  14. ListNode node = reverse(node1);
  15. System.out.println("=========反转后=========");
  16. print(node);
  17. }
  18. // 采用双指针法
  19. public static ListNode reverseList(ListNode head) {
  20. // 如果链表为null 直接返回null
  21. if (head == null) {
  22. return null;
  23. }
  24. // 如果链表只有一个节点,直接返回头节点
  25. if (head.next == null) {
  26. return head;
  27. }
  28. ListNode pre = null;
  29. ListNode cur = head;
  30. while (cur != null) {
  31. ListNode temp = cur.next;
  32. cur.next = pre;
  33. pre = cur;
  34. cur = temp;
  35. }
  36. return pre;
  37. }
  38. }

方法二采用递归方式!

  1. public static ListNode reverseList2(ListNode pre, ListNode cur) {
  2. if (cur == null) {
  3. return pre;
  4. }
  5. ListNode temp = cur.next;
  6. cur.next = pre;
  7. return reverseList2(cur,temp);
  8. }
  9. public static ListNode reverse(ListNode head) {
  10. return reverseList2(null,head);
  11. }

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

闽ICP备14008679号