想问下你在刷完题,尽自己能力写了,没解决问题,然后看答案可以解决的能达到学习效果吗?

来源:5-7 更多和链表相关的问题

慕瓜6217094

2021-07-26

波波老师关于刷题想请教下问题。因为是刚学习链表,不太熟悉。看了下leetcode上的题,我能把主要逻辑写出来,但是有一些细节有问题导致代码提交不成功。这种情况下我看一下官方题解,就可以解出来了。想问下你在刷完题,尽自己能力写了,没解决问题,然后看答案可以解决的能达到学习效果吗?

leetcode 21 号题目,合并两个链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

        if ( l1 == null && l2 == null)
            return null;
        if ( l1 == null)
            return  l2;
        if ( l2 == null)
            return  l1;

        ListNode head = new ListNode(-1);
        ListNode cur = head;

        while ( l1 != null && l2 != null) {
            if ( l1.val <= l2.val) {
                cur.next = new ListNode(l1.val);
                l1 = l1.next;
                cur = cur.next;
            } else {
                cur.next = new ListNode(l2.val);
                l2 = l2.next;
                cur = cur.next;
            }

            if ( l1 == null ) {
                while ( l2 != null) {
                    cur.next = new ListNode( l2.val);
                    cur = cur.next;
                    l2 = l2.next;
                }
            }
            if ( l2 == null) {
                while ( l1 != null) {
                    cur.next = new ListNode(l2.val);
                    cur = cur.next;
                    l1 = l1.next;
                }
            }
        }

        head = head.next;

        return head;
    }

我的while大概逻辑和题解是一致的,就是处理一些边缘问题,就比如,遍历完一个链表可能一个已经为空了,另一个链表还有元素。
我自己想的是在while里面添加个判断,如果存在这种情况。就在判断里用循环将节点依次加入待返回的链表。
而官网题解是存在这种情况,直接将剩余的非空链表挂接在待返回的链表。
像这样我看答案就理解了

写回答

1回答

liuyubobobo

2021-07-26

可以的,没问题的。答案存在的目的就是让大家学习借鉴的。


只要你把握好:

1)如果不是思路上的不会,而是代码书写上的问题,先尝试尽量调试自己的程序,即便自己不能写出正确的代码,也应该能理解自己的代码的问题在哪里;

2)看正确的答案,除了看到一个正确答案以外,一定要关注,对于自己写程序时,不会处理,或者处理有问题的地方,别人的程序到底是怎么处理的,自己写的时候遗漏了什么,或者哪里想错了。一定要总结。总结至关重要。


我觉得只要把握好这些,就没有问题:)


继续加油!:)

1
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程