LeetCode - 21. Merge Two Sorted Lists

来源:互联网 发布:linux运行级别 编辑:程序博客网 时间:2024/06/06 09:15

使用两个指针,开始的时候分别指向两个sorted lists的开头,并且初始化一个dummyNode,然后迭代比较这两个指针指向的val,将比较小的那个放到dummyNode开头的list的后面,当退出循环之后还要检测下哪个list没有被完全迭代完毕,继而继续迭代,时间复杂度O(m + n),空间复杂度constant,代码如下:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {        // Corner case        if(l1 == null && l2 == null) return null;        if(l1 == null || l2 == null) return l1 == null ? l2 : l1;                // Initialize pointers        ListNode dummyNode = new ListNode(0);        ListNode pointer = dummyNode;                while(l1 != null && l2 != null){            if(l1.val > l2.val){                pointer.next = l2;                pointer = pointer.next;                l2 = l2.next;            }else{                pointer.next = l1;                pointer = pointer.next;                l1 = l1.next;            }        }                // Check which list is empty        if(l1 == null){            while(l2 != null){                pointer.next = l2;                pointer = pointer.next;                l2 = l2.next;            }        }else{            while(l1 != null){                pointer.next = l1;                pointer = pointer.next;                l1 = l1.next;            }        }                return dummyNode.next;    }}


知识点:

1. 当linked lists, tree等头节点可能会发生变化的时候,可以使用dummyNode,最后返回dummyNode.next即可

0 0
原创粉丝点击