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





