【链表】数据结构与算法——代码随想录

学习目的
1.会链表的定义、常用的基本操作。
2.会解决几种常用的链表相关的题目。

(一)链表基础知识
1.概念基础
(1)组成:数据+指针
(2)类型:单链表、双链表、循环链表
(3)存储方式:分散存储
2.代码实现
(1)节点定义

struct ListNode{
   
	int val;
	ListNode *next;
	ListNode(int x): val(x),next(NULL){
   }
};

(2)节点初始化
初始化节点:
使用默认构造函数初始化节点时,默认构造函数不会初始化头结点。

ListNode*head = new ListNode()
head->val = 5;

(3)虚拟头结点

//设置一个虚拟的头结点
ListNode* dummyHead = new ListNode(0);
//让头结点与head发生联系
dummyHead->next = head;
//定义一个新的节点,对现有链表进行操作
ListNode* cur = dummyHead;
...//之间是删除添加等一些基本操作
//把头结点还给头结点
head = dummyHead->next;
//删除虚拟结点
delete dummyHead;
return head;

3.常用操作
(1)删除结点
(2)添加结点

(二)链表例题
1.移除链表中的元素
移除链表中的元素
题目梳理:删除满足某一个值的所有结点
步骤:
a.设置虚拟头结点(考察结点的创建,初始值以及下一个指针的指向)【在代码的末端同步写一个删除头结点】
b.遍历列表(链表中结点具体值的读取、while 循环的编写)
c.删除符合条件的结点(链表结点的删除)
运行时出现的错误以及解决:LeetCode:执行出错runtime error: member access within null pointer of type ‘ListNode‘ (solution.cpp)解决方法

class Solution {
   
public:
    ListNode* removeElements(ListNode* head, int val) {
   
        ListNode* dummyHead = new ListNode(0);
        dummyHead->next = head;
        ListNode* cur = dummyHead;
        while (cur!=NULL&&cur->next != NULL){
   //需要有一个这样的判断条件通常
            if(cur->next->val == val){
   
                ListNode* tempt = cur->next;
                cur->next=cur->next->next;
                delete tempt;
            }else{
   
                cur = cur->next;
            }
        }
 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值