203移除元素)
1)在原链表上进行直接移除
没有思路上的问题 但是在实现第一遍的时候没有想到头结点的特殊情况(刷题太少了不能一次就考虑到所有情况)
在代码实现上
ListNode* removeElements(ListNode* head, int val) {
while(head!=NULL&&head->val==val){
ListNode*temp =head;
head=head->next;
delete temp;
}
理解上小磕绊出现在这里的temp是指针指向而已 并非节点
2)虚拟头结点
思路和直接移除相差不大 是将一个操作普适化 优化了头结点的特殊处理部分,
代码处理方面这块完全忽略自己做直接返回了虚拟的头结点
head=hummyhead->next;
delete hummyhead;
return head;
707)设计链表
1)设计虚拟头结点以及删除index节点 在上一个203)已经学会
2)思路卡壳在寻找指定下标没有想到用index--的形式一直想着把他作为参数传进来直接一步到位
3)细节——size++老是遗漏
4)tips:理解加深 cur —current 保护head不变的临时遍历指针 链表需要返回的就是链表的头指针
206)翻转链表
双指针)(没有太多思路完全没想到如何运用双指针);
递归)参照双指针的思路第一次学
总结
1)看双指针需要什么 决定了传入什么
2)递归函数调用实时机就是循环开始第二轮的时机
3)非递归的一些赋值初始化工作可以放到递归传参的步骤里来实现。
reverse(head,NULL)
ListNode* cur = head;
ListNode* pre = NULL;
上述两个代码就是等效的