写在前面
代码说明:代码的下载地址: https://github.com/WuNianLuoMeng/Coding
视频说明:第一次以这样的形式录视频,如果有哪里说的不对,还请各位及时指出,谢谢~
合并两个排序的链表 视频链接
方法一:类似于归并排序中子序列合并过程,不断去比较两个链表中节点的val值,然后去判断那个节点优先需要添加到合成链表的尾部。
public ListNode Merge(ListNode list1,ListNode list2) {
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
ListNode headNode; /// 最终合成链表得头节点。
if (list1.val > list2.val) {
headNode = list2;
list2 = list2.next;
} else {
headNode = list1;
list1 = list1.next;
}
ListNode removeNode = headNode; /// 其实在当前位置就是合成链表得长度为1,头节点和尾节点是一样的。
while (list1 != null && list2 != null) {
if (list1.val > list2.val) {
removeNode.next = list2; /// 将合成链表的尾部节点添加链表2中当前所指向的节点
removeNode = list2; /// 去更新合成链表的尾部节点
list2 = list2.next;
} else {
removeNode.next = list1; /// 将合成链表的尾部节点添加链表2中当前所指向的节点
removeNode = list1; /// 去更新合成链表的尾部节点
list1 = list1.next;
}
}
/// 其实就是将剩余的链表1中的节点放入到合成链表中
while (list1 != null) {
removeNode.next = list1;
removeNode = list1;
list1 = list1.next;
}
/// 其实就是将剩余的链表2中的节点放入到合成链表中
while (list2 != null) {
removeNode.next = list2;
removeNode = list2;
list2 = list2.next;
}
return headNode;
} 
京公网安备 11010502036488号