第三天/ 203.移除链表元素 ,707.设计链表 ,206.反转链表

文章讨论了链表操作中的常见问题,如删除时对头结点判断的改进、设计链表时考虑链表为空的情况以及反转链表时的错误修复。强调了正确处理边界条件和避免指针异常的重要性。

203.删除链表

思路:

解析:

感想和总结:1、对于head的判断,放在了整个的处理循环里边,而不是外边,导致出现空指针异常。2、while条件的判断,是p&&p->next,而不是||,这是因为p已经判断过不可能为val,只会是判断p->next是否为val.

先把错误代码附上

ListNode* p = head;

        while(p->next || p){

            while(head->val == val && head) {

                ListNode* tmp = head;

                head = head->next;

                delete tmp;

            }  

            if(p->next->val == val) {

                ListNode* q = p->next;

                 p->next = p->next->next;

                delete q;

            } else {

                p = p->next;

            } 

        }

        return head;

    }

707.设计链表

思路:熟悉链表的各种操作,并且用虚拟头节点会更容易些。

解析:

感想和总结:1、在addTail的时候,没有考虑链表本身如果为空的情况。如果直接tmp=_tmpHead->next,那么执行tmp->next的时候会出现指针异常。2、在删除节点操作时,需要用一个临时节点来指向要删除的这个节点,并且最后delete后,要赋值nullptr;

206.链表反转

思路:改变next指向,递归或者循环

解析:

感想和总结:思路是正确的,即用两个指针改变next指向,但是眼高手低,代码一堆错误。返回值应该返回pre而不是cur。while条件是cur存在而不是cur->next不为空。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值