题目:
将两个有序链表合并为一个新的有序链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。
比如两个链表: 1->3->4 2->5->6
最后输出变成: 1->2->3->4->5->6
思路:
- 定义一个链表结构
- 合并链表,一对一比较大小,将合并的链表放入新创建的链表中
代码:
/**
* @description:链表结构
* @author: huoyajing
* @time: 2021/6/6 6:01 下午
*/
public class ListNode {
//当前值
int val;
//链表下一个结点值
ListNode next;
//构造函数
ListNode(int value){
val=value;
}
}
/**
* 合并方法
* @param node1
* @param node2
* @return
*/
public static ListNode merge(ListNode node1, ListNode node2) {
//最后输出链表
ListNode mergeLinked;
if (node1 == null) {
return node2;
} else if (node2 == null) {
return node1;
}
//递归实现
if (node1.val < node2.val) {
mergeLinked = node1;
mergeLinked.next = merge(node1.next, node2);
} else {
mergeLinked = node2;
mergeLinked.next = merge(node1, node2.next);
}
return mergeLinked;
}
public static void main(String[] args) {
//两个链表 nodeRoot1和nodeRoot2 1->3>4 2>5>6
ListNode nodeRoot1 = new ListNode(1);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);
ListNode nodeRoot2 = new ListNode(2);
ListNode node5 = new ListNode(5);
ListNode node6 = new ListNode(6);
nodeRoot1.next = node2;
node2.next = node3;
nodeRoot2.next = node5;
node5.next = node6;
ListNode node = merge(nodeRoot1, nodeRoot2);
//循环输出
while (node != null) {
System.out.println(node.val + " ");
node = node.next;
}
}
代码解释图解:
递归1:
递归2:
递归3:
递归4:
递归5:
最后剩下node2,直接落入即可。