输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
}
}
Code:
public ListNode Merge(ListNode list1, ListNode list2) {
ListNode head;
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
if (list1.val < list2.val) {
head = list1;
head.next = Merge(list1.next, list2);
} else {
head = list2;
head.next = Merge(list1, list2.next);
}
return head;
}
思路:利用递归,谁小谁做头结点,然后head.next=Merge() 来递归完成
CODE:
package 牛客;
import edu.xaled.List;
public class 合并两个排序的链表 {
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public ListNode Merge(ListNode list1, ListNode list2) {
if (list1 == null)
return list2; // 判断到某个链表为空就返回另一个链表。如果两个链表都为空呢?
// 没关系,这时候随便返回哪个链表,不也是空的吗?
if (list2 == null)
return list1;
ListNode list0 = null;// 定义一个链表作为返回值
if (list1.val < list2.val) {// 判断此时的值,如果list1比较小,就先把list1赋值给list0,反之亦然
list0 = list1;
list0.next = Merge(list1.next, list2);// 做递归,求链表的下一跳的值
} else {
list0 = list2;
list0.next = Merge(list1, list2.next);
}
return list0;
}
private ListNode head=null;//头指针为空
private int size=0;
// public static void display(ListNode head) {
// for(ListNode c=head;c!=null; c=c.next) {
// System.out.printf("(%d)->",c.val);
// }
// System.out.printf("null");
// System.out.printf("%n");
// }
public static void main(String[] args) {
ListNode head1 = new ListNode(1);
head1.next = new ListNode(3);
head1.next.next = new ListNode(5);
head1.next.next.next = new ListNode(7);
head1.next.next.next.next = new ListNode(9);
ListNode head2 = new ListNode(2);
head2.next = new ListNode(3);
head2.next.next = new ListNode(6);
head2.next.next.next = new ListNode(8);
head2.next.next.next.next = new ListNode(10);
合并两个排序的链表 s = new 合并两个排序的链表();
ListNode listNode = s.Merge(head1,head2);
while (listNode.next != null) {
System.out.println(listNode.val);
listNode = listNode.next;
}
}
}