[链表专题]设计链表

描述

本题是力扣的707. 设计链表

考点

  • 链表的常用操作设计

题解

class MyLinkedList {
 private:
  int size;
  ListNode *dummyHead;
 public:
  MyLinkedList() : size(0), dummyHead(new ListNode(-1)) {}

  int get(int index) {
   if (index < 0 || index > size - 1) return -1;
   ListNode *cur = dummyHead->next;
   while (index--) cur = cur->next;
   return cur->val;
  }

  void addAtHead(int val) {
   dummyHead->next = new ListNode(val, dummyHead->next);
   size++;
  }

  void addAtTail(int val) {
   ListNode *cur = dummyHead;
   while (cur->next != nullptr) cur = cur->next;
   cur->next = new ListNode(val, nullptr);
   size++;
  }

  void addAtIndex(int index, int val) {
   if (index > size) return;
   ListNode *cur = dummyHead;
   while (index--) cur = cur->next;
   cur->next = new ListNode(val, cur->next);
   size++;
  }

  void deleteAtIndex(int index) {
   if (index < 0 || index > size - 1) return;
   ListNode *cur = dummyHead;
   while (index--) cur = cur->next;
   ListNode *tmp = cur->next;
   cur->next = cur->next->next;
   delete tmp;
   size--;
  }
};

思路

题目较为简单,具体实现见代码即可;主要讲几个细节:

  1. 链表类的题基本都需要新增一个dummyHead伪节点,指向真正的头节点;以避免考虑操作头节点时的特殊情况

  2. 单链表类的题涉及迭代操作某一节点时,都应定位到该节点的前一节点;因为若不修改前一节点的next信息,新链表串不起来

    (使用递归或双向链表就可以自由发挥了)

    比如需要删除节点3,我们需要定位到节点2

    待处理完节点3后,需要将节点2与节点4连接起来,链表才是完整的

更多

恭喜你完成本题!

你可以选择继续下一题,或移步至仓库开始更多类型的挑战:https://fi3wey.github.io/

仓库内包含了更多经典案例的逻辑剖析与实现细节,助你在算法的学习之旅上一往无前!

看官若还满意,还请Star一下哟~

关注公众号峰狂算法,获取最新的刷题指导呀~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值