Java有序链表实现求助:初始为空,添加指定奇数元素
别慌,我来一步步帮你搭建这个适配测试用例的Java链表类,重点搞定addSorted方法!
第一步:先定义链表的核心——节点类
链表的基本组成单元是节点,每个节点需要存储数据和指向下一个节点的引用,代码很简单:
class ListNode { Integer data; // 存储要添加的奇数Integer对象 ListNode next; // 指向下一个节点的引用 // 构造方法,创建节点时直接传入数据 public ListNode(Integer data) { this.data = data; this.next = null; // 初始时没有下一个节点 } }
第二步:搭建链表的主体类
接下来创建链表类,我们叫它SortedOddLinkedList(突出是存有序奇数的链表),初始化时是空链表,完全对应你的测试用例起始条件:
public class SortedOddLinkedList { private ListNode head; // 链表的头节点,空链表时为null // 构造方法:初始化空链表 public SortedOddLinkedList() { this.head = null; } }
第三步:实现关键的
addSorted方法 这是核心逻辑,要保证添加的奇数始终让链表保持升序。我们分三种典型情况处理:
- 链表是空的:直接把新节点作为头节点
- 新元素比头节点的元素小:插在链表最前面
- 新元素需要插在中间或尾部:遍历找到合适位置再插入
另外可以加个校验,确保传入的是符合要求的奇数(贴合测试用例的约束),代码如下:
public void addSorted(Integer element) { // 校验:只能添加1到9999之间的奇数Integer对象 if (element == null || element < 1 || element > 9999 || element % 2 == 0) { throw new IllegalArgumentException("请传入1-9999范围内的奇数Integer对象"); } ListNode newNode = new ListNode(element); // 情况1:空链表,直接设为头节点 if (head == null) { head = newNode; return; } // 情况2:新元素比头节点小,插在头部 if (element < head.data) { newNode.next = head; head = newNode; return; } // 情况3:遍历找插入位置,找到第一个比新元素大的节点的前一个节点 ListNode current = head; while (current.next != null && current.next.data < element) { current = current.next; } // 插入新节点到current的后面 newNode.next = current.next; current.next = newNode; }
第四步:加个测试用的打印方法
方便你快速验证链表的顺序是否正确:
public void printLinkedList() { ListNode current = head; while (current != null) { System.out.print(current.data + " "); current = current.next; } System.out.println(); }
测试你的场景
比如从空链表开始添加3、1、5这些奇数:
public static void main(String[] args) { SortedOddLinkedList list = new SortedOddLinkedList(); list.addSorted(3); list.addSorted(1); list.addSorted(5); list.printLinkedList(); // 输出:1 3 5,完美符合有序要求 }
如果需要处理重复元素、或者更复杂的边界情况,可以再调整逻辑~
内容的提问来源于stack exchange,提问作者Samuraike
相关产品推荐
相关产品推荐

