题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
给定的结点结构:
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; } }