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