Java反转链表

**反转链表:**不修改每个结点,修改每个结点的指向。
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。反转链表
在这里插入图片描述

1.思想

  1. 判断链表是否为空,为空就返回null
  2. 不为空定义结点cur指向链表头结点,定义前驱结点prev为空,只要当cur!=null时候就进入循环,每次将ListNode curNext = cur.next;然后将cur指向其前驱结点prev;然后前驱结点后移使prev=cur;最后cur=curNext;

2.具体步骤

在这里插入图片描述

在这里插入图片描述

3.代码

public ListNode reverseList() {
    
    
        if (this.head == null) {
    
    
            return null;
        }
        ListNode cur = this.head;
        ListNode prev = null;
        while (cur != null) {
    
    
            ListNode curNext = cur.next;
            cur.next = prev;
            prev = cur;
            cur = curNext;
        }
        return prev;
    }

测试:

public static void main(String[] args) {
    
    
        MyLinkedList myLinkedList = new MyLinkedList();
        //myLinkedList.createList();
        myLinkedList.addLast(12);
        myLinkedList.addLast(23);
        myLinkedList.addLast(34);
        myLinkedList.addLast(45);
        myLinkedList.addLast(56);
        System.out.println("反转前:");
        myLinkedList.display();
        ListNode ret=myLinkedList.reverseList();
        System.out.println("反转后:");
        myLinkedList.display2(ret);

    }

在这里插入图片描述
注意:
链表反转之后不能从原来的链表头结点打印,因为原来头结点head指向空了,后面的结点就不能打印,智能打印一个节结点。在这里插入图片描述

因此反转之后,按照上面分析prev就是头结点,所以我们返回头结点,用一个参数去接收,打印的时候从新的头结点开始打印。
在这里插入图片描述

打印:
在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_44721738/article/details/121177621