今天刚测试例子不足之处欢迎大家交流
#include <bits/stdc++.h>
using namespace std;
typedef struct Node
{
int data; //数据域
struct Node * next; //指针域
} *LinkList;
//初始化链表
void InitLinllist(LinkList *L)
{
(*L) = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
}
//创建链表头插法
void creatFormHead (LinkList *L, int n)//链表头指针地址,插入结点个数
{
Node *s; //插入结点
int m[n];
for(int i = 0; i < n; i++)
{
scanf("%d", &m[i]);
s = (Node*)malloc(sizeof(Node));
s->data = m[i];
s->next = (*L)->next;
(*L)->next = s;
}
}
// 创建链表尾插法
void creatFormTail(LinkList *L, int n)
{
Node *s, *r;//s待插入结点 r记录尾节点
int m[n]; //存放数据域数据
r = *L;
for(int i = 0; i < n; i++)
{
scanf("%d", &m[i]);
s = (Node*)malloc(sizeof(Node));
s->data = m[i];
r->next = s;
r = s;
}
r->next = NULL;
}
//searchingLinkList based on positin
LinkList Serchinglist(LinkList *L, int i) //寻找第 i个元素
{
Node *p;//记录被搜索元素
int j = 0; //记录下一搜索位置
p = *L;
if(i == 0)
return p;
else if(i < 0)
{
printf("输入位置下溢\n");
exit(0);
}
while(p != NULL && j < i)
{
p = p->next;
j++;
}
if(p == NULL)
{
printf("输入位置上溢");
}
else
{
return p;
}
}
//删除链表 -
bool Linklistdele (LinkList *L, int i) //删除第i个元素
{
Node *pre, *p; //pre记录被删除的元素的前驱, p记录被删除元素
pre = Serchinglist(L, i - 1);//寻找第i-1个元素
p = pre->next;
if(p == NULL)
{
printf("第i个元素下溢\n");
}
pre->next = p->next;
free(p);
return true;
}
//输出链表
void otpList(LinkList L)
{
Node *p = L->next;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
LinkList L; //头指针;
int n;
int m;
printf("请输入元素个数:\n");
scanf("%d", &n);
//初始化链表
InitLinllist(&L) ;
//创建链表
//creatFormHead (&L, n); //头插法
creatFormTail(&L, n); //尾插法
otpList(L);
printf("你想删除第几个元素:\n");
scanf("%d", &m);
Linklistdele (&L, m);
otpList(L);
return 0;
}