题目:输入两个递增排序的链表,合并这两个链表并使得新链表中的结点仍然按照顺序排序
分析:这个问题一出来,马上就可以想到递归的思想,这种思想在链表以及树的操作中相当常见,在本题中主要涉及的还是链表中值得比较,比较出较小的结点就插入新的链表中,然后再比较下一个结点,直接上代码就一目了然了。
public static class ListNode{
int value;
ListNode next;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
}
public static ListNode merge2likedlist(ListNode head1,ListNode head2){
//合并后新链表的头结点
ListNode head = null;
if(head1 == null){
head = head2;
}
if(head2 == null){
head = head1;
}
if(head1 != null && head2 != null){
//node1 node2用来分别遍历两个链表
ListNode node1 = head1;
ListNode node2 = head2;
//比较第一个结点的value,谁小谁为新链表的头结点,然后递归的比较下去直到结束
if(node1.getValue() < node2.getValue()){
head = head1;
head.setNext(merge2likedlist(node1.getNext(),node2));
}else{
head = node2;
head.setNext(merge2likedlist(node1,node2.getNext()));
}
}
return head;
}