链表的边界问题

本文探讨链表的边界问题,包括结点结构和链表结构,重点讨论了如何处理链表逆序和删除链表中重复数据的边界条件。在逆序操作中,通过保存额外指针解决头尾交换问题;在删除重复数据时,利用双层循环避免丢失头结点,并处理尾结点特殊情况。
摘要由CSDN通过智能技术生成

链表的边界问题

引言:作为初学数据结构的萌新,在进行链表删除和添加的时候总会因为忽略链表头或者链表尾,使编译结果偏离预期,为了强调边界问题的重要性,我在单向链表的结构体中加入尾指针

结点结构和链表结构

#define TYPE int
// 定义结点
typedef struct Node{
   
	    TYPE data;          //存储数据
	struct Node* next;  //存储下一个结点的指针
}Node;

//定义链表
typedef struct List{
   
	    Node* head;         //链表头指针
	    Node* tail;         //链表尾指针
	    size_t size;        //链表的大小
}List;

注意:当链表为空时,head = tail = NULL;
   当链表中只有一个结点node的时候,head = tail = node;

结合实际讨论边界问题

问题1:链表逆序

解题思路:

在描述中指针1、2、3为Node*类型,我将分别用p1、p2、p3来表示

①在单向链表中,对结点位置的改变往往会发生下述情况

在这里插入图片描述
如果我们要调换1,2结点的位置,若直接进行node1->n

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值