反转链表操作,怎末把反转链表之后输出啊?ListNode就是自己定义的一个数据结构吗?


public class Demo11 {

    static class ListNode{
        int val;
        ListNode next;
        ListNode(int x){val=x;}
    }
    public static  ListNode reverse(ListNode head){
        ListNode cur = head;
        ListNode pre = null;
        ListNode tmp;
        while(cur!=null) {
            tmp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = tmp;
        }
        return head;
    }
    static void print(ListNode head){
        while(head!=null){
            System.out.println("节点"+head.val);
            head = head.next;
        }
    }
    public static void main(String[] args) {
      ListNode f1 = new ListNode(1);
      ListNode f2 = new ListNode(2);
      ListNode f3 = new ListNode(3);
      f1.next = f2;
      f2.next = f3;
      reverse(f1);
      print(f1);
    }
}

我以为调用reverse函数后,调用输出函数会输出3,2,1。但是只输出了1。然后我尝试输出f1.next发现
没有输出。

img

img


img

img


cur第一次指向header,设置下一节点为空,header的变化:1-2-3 ---》 1-null
后续的操作都不是操作head,你直接返回head,可不就是1嘛

Java 实现双向链表_西凉的悲伤的博客-CSDN博客 双向链表示意图:以下是双链表相对于单链表的优缺点。优点(1) 可以向前和向后遍历。(2) 如果给出指向要删除的节点的指针,双向链表中的删除操作会更有效率。(3)我们可以在给定节点之前快速插入一个新节点。在单向链表中,要删除一个节点,需要指向前一个节点的指针。为了获得这个前一个节点,有时会遍历列表。在双链表中,我们可以使用前一个指针获取前一个节点。缺点(1) 双链表的每个节点都需要额外的空间用于前一个指针。(2) 所有的操作都需要一个额外的指针来维护。例如,在插入时,我们需要同时修改前一个 https://blog.csdn.net/qq_33697094/article/details/121544972

反转代码有问题,返回head不对,可以调试看看