反转链表(Java)

版权声明:转载请注明原文地址。 https://blog.csdn.net/qq_39240270/article/details/88547558

题目描述

将单链表反转

解决

  1. 迭代
            每次将后一个节点的next指针指向前一个节点,要使用一个中间指针保存当前节点,避免出现内存泄漏
    代码:
	//迭代实现
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null)
            return head;
        ListNode prev = head;//原链表的头指针
        ListNode current = head.next;//用于指向下一个指针
        ListNode temp = head;//用于存储当前节点
        while(current != null){
            //将当前节点的next指针指向前一个节点
            temp = current;
            temp.next = prev;
            
            //继续向后迭代
            prev = temp;
            current = current.next;
        }
        head.next = null;
        return temp;
    }
  1. 递归
            要使当前节点的next指针指向前一个节点,先使当前节点的下一个节点的next指针指向该节点
    代码:
	//递归实现
    public ListNode reverseList(ListNode head) {
        //递归出口
        if(head == null || head.next == null)
            return head;
        ListNode newNode = reverseList(head.next);
        //将下一个节点的next指针指向前一个节点
        head.next.next = head;
        head.next = null;
        return newNode;
    }

猜你喜欢

转载自blog.csdn.net/qq_39240270/article/details/88547558