/*
* 面试题25:合并两个排序的链表
* 【考点:递归和循环】合并两个排序的链表
* 题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
* 解题思路:本题可以用递归进行求解
*/
class ListNode4 {
int val;
ListNode4 next = null;
ListNode4(int val) {
this.val = val;
}
}
public class No25Merge {
public static void main(String[] args) {
ListNode4 l1 = new ListNode4(0);
l1.next = new ListNode4(2);
l1.next.next = new ListNode4(5);
l1.next.next.next = new ListNode4(7);
ListNode4 l2 = new ListNode4(1);
l2.next = new ListNode4(3);
l2.next.next = new ListNode4(5);
ListNode4 l = new No25Merge().Merge(l1, l2);
while (l != null) {
System.out.print(l.val + " ");
l = l.next;
}
}
public ListNode4 Merge(ListNode4 list1, ListNode4 list2) {
//如果两个链表都为空,则返回结果为null
if (list1 == null && list2 == null) {
return null;
}
//如果链表一为空,则返回结果直接是链表二
if (list1 == null) {
return list2;
}
//同理,如果链表二为空,则返回结果直接是链表一
if (list2 == null) {
return list1;
}
//定义新的链表,用于装合并后的链表元素
ListNode4 head = null;
//如果链表一的第一个元素小于链表二的第一个元素,则将链表一的元素值给head,依此类推,用递归方法
if(list1.val <= list2.val) {
head = list1;
head.next = Merge(head.next,list2);
} else {//同理,如果链表二的第一个元素小于链表一的第一个元素,则将链表二的元素值给head,依此类推,用递归方法
head = list2;
head.next = Merge(list1,head.next);
}
return head;
}
}
面试题25:合并两个排序的链表
最新推荐文章于 2021-12-06 10:34:44 发布