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

求助:Java SortedSet自定义链表实现代码问题排查

Fixing Your Custom Linked List-based SortedSet in Java

Hey there! Let's work through each of your issues one by one, focusing on the marked <TODO> sections you mentioned:


1. Issue: Only the First Input Number is Displayed (Can't Generate Ordered List)

Problem in Lines 44-61

The root cause is almost certainly either broken traversal logic (stopping after the first node) or incorrect sorted insertion (adding all nodes to the same spot instead of maintaining order). Common mistakes here include:

  • Forgetting to advance the traversal pointer after printing the first element
  • Using an if statement instead of a while loop for full list traversal
  • Inserting new nodes directly at the head every time, regardless of value

Corrected Code & Explanation

Fix for Traversal (Printing the List)

If your original print logic looked like this:

// Broken traversal
Node current = head;
if (current != null) {
    System.out.print(current.value);
    // Missing: move to next node
}

Update it to traverse all nodes:

// Corrected traversal to print full sorted list
Node current = head;
while (current != null) {
    System.out.print(current.value + " ");
    current = current.next; // Critical: advance to next node
}
System.out.println();

Fix for Sorted Insertion (Add Method)

If the issue is in how you add nodes, use this sorted insertion logic:

public void add(int value) {
    Node newNode = new Node(value);
    // Case 1: Empty list or new value is smaller than head
    if (head == null || value < head.value) {
        newNode.next = head;
        head = newNode;
        return;
    }
    // Case 2: Find the correct position to insert
    Node current = head;
    while (current.next != null && current.next.value < value) {
        current = current.next;
    }
    newNode.next = current.next;
    current.next = newNode;
}

This ensures each new node is inserted in the right spot to keep the list ordered, and the traversal loop prints every element in sequence.


2. Issue: delete Command Doesn't Work

Problem in Lines 75-83

Linked list deletion fails for a few common reasons:

  • Not handling the case where the node to delete is the head of the list
  • Failing to link the predecessor node to the successor after deletion
  • Not checking if the list is empty before attempting deletion (leading to null pointers)

Corrected Delete Method

public boolean delete(int value) {
    // Empty list: nothing to delete
    if (head == null) {
        return false;
    }
    // Case 1: Delete the head node
    if (head.value == value) {
        head = head.next;
        return true;
    }
    // Case 2: Find the node before the target to delete
    Node current = head;
    while (current.next != null && current.next.value != value) {
        current = current.next;
    }
    // Target node not found
    if (current.next == null) {
        return false;
    }
    // Bypass the target node to delete it
    current.next = current.next.next;
    return true;
}

Explanation

  • We first handle empty lists to avoid crashes.
  • If the target is the head, we simply update the head to point to the next node.
  • For non-head nodes, we find the node right before the target, then link it to the target's next node to remove the target from the list.

3. Issue: exists Command Doesn't Output true/false

Problem in Lines 97-105

This usually happens for two reasons:

  • The exists method doesn't correctly return a boolean value when finding (or not finding) the target
  • You're not actually printing the result of the exists method when processing the command

Corrected Exists Method & Usage

Fix for the exists Method

public boolean exists(int value) {
    Node current = head;
    while (current != null) {
        if (current.value == value) {
            return true; // Return immediately when found
        }
        current = current.next;
    }
    return false; // Return false if traversal completes without finding
}

Fix for Command Handling

Make sure you print the result when processing the exists command in your main logic:

// Example main method logic for exists command
else if (command.equals("exists")) {
    int num = Integer.parseInt(inputParts[1]);
    boolean result = sortedSet.exists(num);
    System.out.println(result); // Critical: print the boolean result
}

Explanation

  • The exists method traverses the list and returns true as soon as it finds the target value, otherwise false.
  • The key fix is ensuring you print the returned boolean value—without this step, you won't see any output for the exists command.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:15:08