美文网首页
21. 合并两个有序链表

21. 合并两个有序链表

作者: justonemoretry | 来源:发表于2020-06-06 22:41 被阅读0次

    自己解法

    这个题比较简单,就是挨个比较两个链表的节点,值较小的节点放到新建的队列,然后这个指针指向后面的节点,这个题基本就是考察了链表的遍历。

    还有个小技巧是,在其中一个链表为空后,可以直接把另一个链表给到temp节点的next。

    class Solution {

        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

            ListNode headNode = new ListNode();

            ListNode temp = headNode;

            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;

            }

             temp.next = l1 == null ? l2 : l1;

            return headNode.next;

        }

    }

    官方解法

    官方使用了个递归的思路,每次把较小值节点拿出来,让它的next指向后面递归生成链表,这样感觉没有迭代好理解,不过算是拓展思路吧。

    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;

            }

        }

    }

    相关文章

      网友评论

          本文标题:21. 合并两个有序链表

          本文链接:https://www.haomeiwen.com/subject/xpfozhtx.html