java 合并两个有序链表_合并两个有序的单链表 java

前面的文章写了合并两个有序的数组,然后想着顺便写一下合并两个有序的单链表。增加自己对这些数据结构操作的熟练度,让自己有更清晰的认识。

先上代码:

public class TwoListToOne {

public static void main(String[] args) {

Node n7 = new Node(7, null);

Node n5 = new Node(5, n7);

Node n3 = new Node(3, n5);

Node root1 = new Node(1, n3);

Node n8 = new Node(8, null);

Node n6 = new Node(6, n8);

Node n4 = new Node(4, n6);

Node root2 = new Node(2, n4);

Node result = twoListToOne2(root1, root2);

while (result != null) {// 遍历的时候写得太快了,写成了result.next,后面发现输出不对,看着代码也没问题,忽然发现遍历错了,尴尬

System.out.println(result.value);

result = result.next;

}

}

private static Node twoListToOne2(Node root1, Node root2) {

if (root1 == null) {

return root2;

}

if (root2 == null) {

return root1;

}

Node temp = new Node(0, null);

Node result = temp;

while (root1 != null && root2 != null) {// 遍历到最后退出

if (root1.value <= root2.value) {

temp.next = root1;

root1 = root1.next;

} else {

temp.next = root2;

root2 = root2.next;

}

temp = temp.next;

}

if (root1 == null) {// 由于是链表,所以直接指向即可

temp.next = root2;

}

if (root2 == null) {

temp.next = root1;

}

return result.next;// 第一个节点是初始化时附加的0,所以去掉

}

}

class Node {

int value;

Node next;

public Node(int value, Node next) {

this.value = value;

this.next = next;

}

}

输出:

1

2

3

4

5

6

7

8

一切都很ok。

这里要注意的是对输出的链表为空的情况的判断,不然直接代入程序会报空指针异常。

然后整体思路和合并两个有序数组时差不多,注意好循环结束条件的书写。

通过这题可以很好地提高自己对单链表操作的熟练度。

《剑指offer》上是用递归写的,也就是每次递归获得一个节点。但是我觉得这样递归下去栈的深度会太高,所以我就按照自己的思路直接写了。

欢迎交流和讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值