LeetCode单向链表——剑指 Offer II 024. 反转链表(递归和迭代)

地址: https://leetcode.cn/problems/UHnkqh/
在这里插入图片描述
解题思路(迭代):
在遍历链表时,将当前节点的next指针改为指向上一个节点,由于节点没有引用其前一个节点因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点,最后返回新的头引用。

public class 反转链表_迭代 {
    
    
    public class ListNode {
    
    
      int val;
      ListNode next;
      ListNode() {
    
    }
      ListNode(int val) {
    
     this.val = val; }
      ListNode(int val, ListNode next) {
    
     this.val = val; this.next = next; }
  }
    public ListNode reverseList(ListNode head) {
    
    
        ListNode prev = null;
        ListNode curr = head;

        while (curr !=null){
    
    
            //next是当前节点的指针
            ListNode next = curr.next;
            //当前节点的指针指向上一个节点 并且存储在变量中.
            curr.next = prev;
            //上一个节点就是当前节点
            prev = curr;
            curr = next;
        }
        //最后
        return prev;
    }
}

递归方式实现:

public class 反转链表_递归 {
    
    
    public class ListNode {
    
    
        int val;
        ListNode next;
        ListNode() {
    
    }
        ListNode(int val) {
    
     this.val = val; }
        ListNode(int val, ListNode next) {
    
     this.val = val; this.next = next; }
    }
    public ListNode reverseList(ListNode head) {
    
    
        //为了不陷入死循环
        if (head ==null || head.next ==null) return head;
        ListNode newHead = reverseList(head.next);
        //假如head=5 那么head.next是4 让4的指针指向5
        head.next.next = head;
        head.next = null;
        return newHead;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_62491934/article/details/128739263