版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zyq11223/article/details/78637760
题目名称:
合并两个排序的链表。
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
链表定义:
/*
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val){
* this.val = val;
* }
* }
*/
方法一:递归
// 方法一:递归,25ms,占用内存在19M左右
public ListNode Merge(ListNode list1, ListNode list2) {
//list1和list2分别是两个链表的头节点
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
//第一次if判断时,通过return语句返回合并后用作新链表的头节点
if (list1.val <= list2.val) {
list1.next = Merge(list1.next, list2);
//第一次if语句之后的Merge函数用作合并链表的各个节点
return list1;
} else {
list2.next = Merge(list1, list2.next);
return list2;
}
}
方法二:非递归
//非递归,32ms,占用内存15M左右
public ListNode Merge1(ListNode list1,ListNode list2){
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
ListNode head = null;//记录链表合并后的头结点
ListNode node = null; //用作合并链表的节点,指向合并后链表的尾节点
while(list1 != null && list2 != null){
if(list1.val <= list2.val){
if(head == null){
head = node = list1;
}else{
node.next = list1;
node = node.next;
}
list1 = list1.next;
}else{
if(head == null){
head = node = list2;
}else{
node.next = list2;
node = node.next;
}
list2 = list2.next;
}
}
if(list1 == null){
node.next=list2;
}
if(list2 == null){
node.next = list1;
}
return head;
}