链表中的哨兵节点

哨兵节点
在没有哨兵节点时

对链表进行插入操作时,需要判断当前链表是否有节点,代码大致如下:

if(head == null){
    head = newNode();
}
else{
    newNode.next = current.next;
    current.next = newNode;
}

在进行删除操作时,需要判断删除的是否是最后一个节点,代码大致如下:

if(head.next  == null){
    head = null;
}
else{
     current.next = current.next.next;
}
有哨兵节点时

对链表进行插入操作时,需要判断当前链表是否有节点,代码大致如下:

newNode.next = current.next;
current.next = newNode;

在进行删除操作时,需要判断删除的是否是最后一个节点,代码大致如下:

current.next = current.next.next;

因为哨兵节点始终会存在,索引在进行插入或者删除操作时,不用考虑链表是否为空,是否为最后一个节点,
简化了链表操作。

链表注意点
  1. 如果链表为空时,代码是否能正常工作?
  2. 如果链表只包含一个结点时,代码是否能正常工作?
  3. 如果链表只包含两个结点时,代码是否能正常工作?
  4. 代码逻辑在处理头结点和尾结点的时候,是否能正常工作?
练习题

leetcode中对应的练习题目有:

  1. 206(单链表反转),141(链表中环的检测)
  2. 21(两个有序链表的合并)
  3. 19(删除链表倒数第n个节点)
  4. 87(求链表的中间节点)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值