You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CD播放器双向链表中打印前驱节点与后继节点?

解决双向链表前驱/后继节点打印问题

嘿,我明白你现在的困惑啦——双向链表的previous和next属性明明就在那儿,但不知道怎么在打印的时候用上对吧?别担心,咱们结合你的CD播放列表场景一步步来~

首先,先确认你的DoubleNode类应该包含的核心属性(我猜你大概是这么定义的,如果有调整可以对应修改):

class DoubleNode {
    int trackNumber; // 曲目编号
    String songName; // 歌曲名称
    DoubleNode previous; // 前驱节点引用
    DoubleNode next; // 后继节点引用

    // 构造方法
    public DoubleNode(int trackNumber, String songName) {
        this.trackNumber = trackNumber;
        this.songName = songName;
        this.previous = null;
        this.next = null;
    }
}

方法一:遍历打印整个播放列表

你需要从链表的头节点(或者尾节点)开始逐个遍历,对每个节点,判断它的previous和next是否为null(处理边界:第一首没有上一首,最后一首没有下一首),然后取出对应节点的信息打印。

示例代码如下:

// 假设你的链表类中有head(头节点)和tail(尾节点)属性
public void printFullPlaylist() {
    DoubleNode current = head;
    if (current == null) {
        System.out.println("当前播放列表为空哦~");
        return;
    }

    while (current != null) {
        // 处理上一首信息:如果前驱为null,显示"无",否则显示前驱的编号+名称
        String prevTrack = current.previous == null 
            ? "无" 
            : current.previous.trackNumber + " - " + current.previous.songName;
        
        // 处理下一首信息:同理,后继为null则显示"无"
        String nextTrack = current.next == null 
            ? "无" 
            : current.next.trackNumber + " - " + current.next.songName;

        // 打印当前曲目详情
        System.out.println("=== 曲目 " + current.trackNumber + " ===");
        System.out.println("歌曲名称: " + current.songName);
        System.out.println("上一首: " + prevTrack);
        System.out.println("下一首: " + nextTrack);
        System.out.println("------------------------");

        // 移动到下一个节点继续遍历
        current = current.next;
    }
}

方法二:根据用户输入的曲目编号,打印单条曲目的上下首

如果是用Scanner接收用户输入的曲目编号,再定位到对应节点打印上下首,可以这么写:

import java.util.Scanner;

public void printTrackWithNeighbors() {
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入要查询的曲目编号:");
    int targetTrack = scanner.nextInt();

    DoubleNode current = head;
    boolean found = false;

    while (current != null) {
        if (current.trackNumber == targetTrack) {
            found = true;
            String prevTrack = current.previous == null 
                ? "无" 
                : current.previous.trackNumber + " - " + current.previous.songName;
            String nextTrack = current.next == null 
                ? "无" 
                : current.next.trackNumber + " - " + current.next.songName;

            System.out.println("\n=== 查询结果 ===");
            System.out.println("曲目编号: " + current.trackNumber);
            System.out.println("歌曲名称: " + current.songName);
            System.out.println("上一首: " + prevTrack);
            System.out.println("下一首: " + nextTrack);
            break;
        }
        current = current.next;
    }

    if (!found) {
        System.out.println("未找到编号为" + targetTrack + "的曲目哦~");
    }
    scanner.close();
}

核心逻辑总结

其实本质就是利用双向链表每个节点的previous和next引用,先判断是否为null(避免空指针异常),再根据情况打印对应的节点信息:

  • 当current.previous == null:说明这是链表的第一个节点,没有上一首
  • 当current.next == null:说明这是链表的最后一个节点,没有下一首
  • 否则直接访问current.previous或current.next的trackNumber和songName属性即可

内容的提问来源于stack exchange,提问作者Raphael Ramos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:03:39