2016 - 2024

感恩一路有你

Java详解如何将一条单向链表按节点奇偶位置分解

浏览量:4199 时间:2024-06-26 17:22:46 作者:采采

给定一个单向无环链表,实现一个算法,按照链表节点奇偶位置分解为两条链表,链接为一条链表后返回。

编写链表节点类

我们首先需要编写一个静态内部类来代表链表的节点。这个节点类包含一个值属性和一个指向下一个节点的引用。

```java

public class ListNode {

int val;

ListNode next;

public ListNode(int val) {

val;

null;

}

}

```

实现算法

下面我们来实现按照奇偶位置分解链表的算法。具体步骤如下:

1. 创建两个空节点,作为原链表奇偶位置子链表的头节点。

2. 遍历原始链表,将节点按照奇偶位置分解并链接起来。

3. 将通过节点奇偶位置构建的子链表链接为一条链表并返回。

```java

public ListNode splitListByOddEven(ListNode head) {

if (head null || null) {

return head;

}

ListNode oddHead new ListNode(0);

ListNode evenHead new ListNode(0);

ListNode odd oddHead;

ListNode even evenHead;

ListNode curr head;

boolean isOdd true;

while (curr ! null) {

if (isOdd) {

curr;

odd ;

} else {

curr;

even ;

}

curr ;

isOdd !isOdd;

}

;

null;

return ;

}

```

辅助函数:将链表转为字符串

为了方便测试程序,我们还需要编写一个函数,可以将一条单向无环链表转变为一个字符串,便于输出链表。

```java

public String convertToString(ListNode head) {

StringBuilder sb new StringBuilder();

ListNode curr head;

while (curr ! null) {

().append(" -> ");

curr ;

}

("null");

return ();

}

```

本地测试主方法

我们还需要编写一个本地测试方法,来验证我们的算法是否正确。

```java

public static void main(String[] args) {

Solution solution new Solution();

// 创建链表 1 -> 2 -> 3 -> 4 -> 5

ListNode head new ListNode(1);

ListNode node2 new ListNode(2);

ListNode node3 new ListNode(3);

ListNode node4 new ListNode(4);

ListNode node5 new ListNode(5);

node2;

node3;

node4;

node5;

("原链表:" (head));

ListNode result solution.splitListByOddEven(head);

("奇偶位置分解后的链表:" (result));

}

```

观察输出结果

运行本地测试方法,观察控制台输出,确保输出符合预期。

提交算法

经过本地测试验证,我们可以将算法提交到目标平台进行测试。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。