思路:最好有两个指针,一个从前往后跑,另一个从后往前跑
因为单链表不存在一个指针从后往前,所以这样处理一下:将单链表中的数据存放在数组中 然后以同样的方式去判断这个数组即可
先写头文件
#pragma once
typedef int ELEM_TYPE;
//有效数据节点结构体设计(头结点借用)
typedef struct Node
{
ELEM_TYPE data;//数据域 (1.头结点:不保存任何数据 2.有效数据节点:保存有效值)
struct Node* next;//指针域 (1.头结点:保存第一个元素的地址 2.有效数据节点:保存下一个有效元素的地址)
}Node, PNode;
/*
//有效数据节点结构体设计
typedef struct Node
{
union
{
int length;
ELEM_TYPE data;//数据域 存放有效值
};
struct Node *next;//指针域 存放下一个有效数据节点的地址
}Node, PNode;
//头结点结构体设计:
typedef struct Head
{
struct Node *next;//指针域 保存第一个有效数据节点的地址
}Head, *PHead;
*/
//带头结点的单链表有哪些操作函数:
//初始化函数(对于头结点进行赋初值)
void Init_list(struct Node* plist);
//购买一个新节点
struct Node* BuyNode(ELEM_TYPE val);
//头插
bool Insert_head(struct Node* plist, ELEM_TYPE val);
//尾插
bool Insert_tail(struct Node* plist, ELEM_TYPE val);
//按位置插入(pos=0