合并两个排序的链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
给定的结点结构:
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
我的想法是:先随便定义一个结点作为开始结点,初始状态:current和head都指向开始结点。比较list1和list2当前的值,较小的那个作为current的next结点,同时向后移动一个结点,current也向后移动一个结点。这样一直比较,直到其中一个链表走完。再将没有走完的链表剩下的第一个结点作为current的next。最后返回head的next,即去掉一开始随便定义的那个结点。
代码如下:
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode head = new ListNode(0);
ListNode current;
current = head;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
current.next = list1;
current = current.next;
list1 = list1.next;
}
else {
current.next = list2;
current = current.next;
list2 = list2.next;
}
}
if (list1 == null)
current.next = list2;
else
current.next = list1;
return head.next;
}
做完了之后,看到也有用递归的。
代码如下:
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
if(list1.val <= list2.val){
list1.next = Merge(list1.next, list2);
return list1;
}else{
list2.next = Merge(list1, list2.next);
return list2;
}
}

浙公网安备 33010602011771号