一.题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
二.题目思路
实现思路
1.获取head1和head2中数据较小的节点,并设置为合并后链表的首节点和尾结点
2.通过循环,依次获得链表1和链表2中数据值较小的节点并添加到合并后链表的末尾
3.当步骤二执行完毕,如果某一个链表的首节点不为null,就将该链表放到排序后链表的尾部
三.代码实现
Node类
private static class Node{
//用于保存节点中的数据
public int data;
//用于保存下一个节点的地址值
public Node next;
public Node(int data) {
this.data = data;
}
public Node(int data, Node next) {
this.data = data;
this.next = next;
}
public int getData() {
return data;
}
public Node getNext() {
return next;
}
public void setData(int data) {
this.data = data;
}
public void setNext(Node next) {
this.next = next;
}
}
public static Node MergeTwoLinkedList(Node head1,Node head2){
//1.先处理head1和head2都为null的情况
if (head1 == null && head2 == null){
return null;
}
//2.处理head1和head2其中一个为null的情况
if (head1 == null){
return head2;
}
if (head2 == null){
return head1;
}
//3.定义headNode和lastNode,分别作为合并后链表的首节点和尾结点
Node headNode = null,lastNode = null;
//4.获取head1和head2中数据值较小的节点,并设置为合并后链表的首节点和尾结点
if (head1.data > head2.data){
headNode = head2;
lastNode = head2;
//更新head2的值,让head2指向它的下一个节点
head2 = head2.next;
}else {
headNode = head1;
lastNode = head1;
head1 = head1.next;
}
//5.定义一个循环,用于依次获取链表1和链表2中较小的节点,
// 并把该链表添加到链表的末尾
while (head1 != null && head2 != null){
//处理head1的数据值大于head2的数据值
if (head1.data > head2.data){
lastNode.next = head2;
lastNode = head2;
head2 = head2.next;
}else {
lastNode.next = head1;
lastNode = head1;
head1 = head1.next;
}
}
//6.循环执行完毕 如果某一个链表中的首节点不为null,则将该链表首节点及其之后的节点加入到链表的尾部
if (head1 == null){
lastNode.next = head2;
}else {
lastNode.next = head1;
}
return headNode;
}
解题思路主要是通过循环找到两个链表中最小的节点,将小的节点添加到新的链表的后面,思路还是比较简单的