#21 合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。其中,节点ListNode的结构如下:
/** * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */
1)递归法
比较两链表头部元素的值的大小,取出值较小的节点L,将 L.next() 与另一队列继续放入函数 mergeTwoLists 中,并返回节点 L 。
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; } else if (l2 == null) { return l1; } else if (l1.val < l2.val) { l1.next = mergeTwoLists(l1.next, l2); return l1; } else { l2.next = mergeTwoLists(l1, l2.next); return l2; } }}
2)迭代法
同样是比较两链表头部元素的值的大小,取出值较小的节点 L 放入输出队列中,并将指向该队列头部的指针向后移动一位,继续比较,直到节点 L 指向 NULL 。
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode result = new ListNode(-1); ListNode temp = result; while(l1!=null && l2!=null){ if(l1.val<=l2.val){ temp.next = l1; l1 = l1.next; }else{ temp.next = l2; l2 = l2.next; } temp = temp.next; } if(l1==null) { temp.next = l2; } if(l2==null) { temp.next = l1; } return result.next; }}
巷子书城全新上线啦~
全新码书全场75折
假期想一起学Java的小伙伴可以加qq群:563347237,相互监督,共同进步。
【阅读全文】进入练习