数据结构(利用题目理解链表)

一、链表的简单理解

1.链表的概念及结构
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链
接次序实现的 。
在这里插入图片描述
注意:
1.从上图可看出,链式结构在逻辑上是连续的,个但是在物理上不一定连续
2.现实中的结点一般都是从堆上申请出来的
3.从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续
假设在32位系统上,结点中值域为int类型,则一个节点的大小为8个字节,则也可能有下述链表:
在这里插入图片描述
2.理解链表的基本概念:
链表是一种动态数据结构,通过指针将一系列节点连接在一起。
每个节点包含两部分:数据域和指针域。数据域用于存储数据,指针域用于指向下一个节点。
链表的入口节点称为头结点,其指针域指向第一个数据节点。
链表分为单链表、双链表和循环链表等类型。
3.掌握链表的基本操作:
初始化链表:创建一个头结点,并将其指针域设置为NULL。
插入节点:在链表的指定位置插入一个新节点。这通常涉及修改前后节点的指针域。
删除节点:从链表中删除指定位置的节点。这同样需要修改前后节点的指针域。
查找节点:根据给定条件查找链表中的节点。
遍历链表:从头结点开始,依次访问链表中的每个节点。

二、链表的题目

第一题:移除链表元素

在这里插入图片描述
https://leetcode.cn/problems/remove-linked-list-elements/

这个题目可以创建一个新的链表即newhead和newtail,并且同时置为空。
在这里插入图片描述
当L1走到逐渐往下走去的时候,进行判断L1->val值不等于val的时候进行循环,如果新链表为空,那么就直接将 L1的值带入进去
要是不为空,就进行尾插,即:newtail->next=val,并让newtail往下走将其赋值给newtail即newtail=newtail->next;总体L1也要随着循环往下走。
最后当newtail不为空的时候,要让newtail的下一个节点指向空。

代码的总体展示1
typedef struct ListNode listnode ;
struct ListNode* removeElements(struct ListNode* head, int val)
 {
    listnode *l1=head;
    listnode *newhead=NULL;
    listnode *newtail=NULL;

    while(l1)
    {

         if(l1->val!=val)
         {
              if(newhead==NULL)
        {
           newhead=newtail=l1;
        }else
        {
        newtail->next=l1;
        newtail=newtail->next;
        }
         }
         l1=l1->next;
    }
    if(newtail)
 {
     newtail->next=NULL;
 }
    return newhead;
}

typedef 是一个关键字,用于为已有的数据类型定义一个新的名称(别名)。使用 typedef 可以使代码更加清晰和易于阅读,尤其是当涉及到复杂的数据类型或结构体时。

第二题:反转链表

在这里插入图片描述
https://leetcode.cn/problems/reverse-linked-list/description/

代码的整体展示2

 typedef struct ListNode listnode;
struct ListNode* reverseList(struct ListNode* head)
 {
    listnode *cur=head;
    listnode *newhead=NULL;

    while(cur)
    {
        listnode *next=cur->next;
        cur->next=newhead;
        newhead=cur;
        cur=next;
    }
    return newhead;
}

总结

链表的题目主要是学会画图,结合题目实际情况去攻克难关!

学习C语言实现链表:
定义链表节点结构体:包含数据域和指针域。
编写链表操作函数:如初始化链表、插入节点、删除节点、查找节点和遍历链表等。
在主函数中调用这些函数,以演示链表的使用。
实践练习:
编写简单的链表程序,如实现一个整数链表,并对其进行插入、删除、查找和遍历等操作。
尝试解决与链表相关的算法问题,如链表反转、合并两个有序链表等。

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值