代码随想录刷题day 3

203. Remove Linked List Elements

不创建dummy 节点的方法: 

当删除节点为头节点时候

ListNode *temp=head; 创建一个temp存储的头结点的位置等下delete释放这部分内存;

head = head->next; //移动头指针的位置到头结点的下一个节点;要注意区分这句与  current->next = current->next->next的区别;

当删除的节点不是头节点的时候

假设删除第n个节点,那么我们的做法是要access n-1个节点并且将n-1 的next 指向n+1, 这样就需要确保删除的节点有前一个节点;

  while(current!=NULL&&current->next != NULL) //这是因为需要对current进行操作且取current->next的值所以都不能为空,可以指向空指针但是不能操作空指针,这种写法的最后一个元素如果需要删除那么在倒数第二个元素的时候被处理,并且倒数第二个元素直接指向空指针; 这行写反了也不行, 如果写成  while(current->next != NULL && current!=NULL) 那么当链表为空链表的时候会先判断current-> next就直接报错了;

创建dummy 节点的方法:

头指针的位置不能更改,不然直接丢失这个链表的位置; 需要创建一个新的临时current变量来遍历

 ListNode *dummy = new ListNode(-1);

 ListNode *current=dummy;

  dummy->next = head;

707. Design Linked List

这题各种越界;注意index是从0开始的;注意考虑各种边界条件,逻辑很简单。

Get_index()中:

if(index > (_size - 1) || index < 0)   //这里容易出错,不减1的话

add in tail 中: 

while(current->next != NULL){

            current = current->next; 这里要记住如果要access current->next, 要先判断不是空节点;

206. Reverse Linked List

这道题以前做过;核心就是改变next指针的指向;

双指针法: 创建两个指针一个current一个previous; 每次都将current->next 指向previous,然后更新previous和current的位置

递归与双指针法一样,只不过是把 while iterative 改成了recursive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值