上个简单链表,写的有些难看,现在更改一下
https://liu-endong.blog.csdn.net/article/details/111934018
添加了删除尾结点,添加了删除头结点
#include <stdio.h>
#include<malloc.h>
#define LEN sizeof(struct List)
#if 1 //1开启 0关闭 VS2019开启 codeblocks关闭
#define scanf scanf_s
#endif
//定义节点
struct List
{
int num;
struct List* next;
};
struct List* creat()
{
struct List* head = (struct List*)malloc(LEN);
head->num = 0; //存储链表长度,理论上头结点不需要数据域
head->next = NULL;
return head;
}
//尾插法加一个节点
struct List* addList(List* head, int num)
{
struct List* p;
p = head;
while (p->next)
{
p = p->next;
}
p->next = (struct List*)malloc(LEN);
p->next->num = num;
p->next->next = NULL;
head->num++;
printf("加入一个节点后链表长度 %d \n", head->num);
return head;
}
//按存储的数据删除一个节点
struct List* deleteList(List* head, int num)
{
struct List* p1, *p2;
p1 = p2 = head;
while (p1->next)
{
p2 = p1;
p1 = p1->next;
if (p1->num == num)
{
p2->next = p1->next;
break;
}
}
return head;
}
//删除尾巴节点
struct List* deleteTail(List* head)
{
struct List* p1, *p2;
p1 = p2 = head->next;
while (p1->next)
{
p2 = p1;
p1 = p1->next;
}
p2->next= NULL;
return head;
}
//删除头节点
struct List* deleteHead(List* head)
{
if (head->next)
{
head->next = head->next->next;
}
return head;
}
//遍历链表
void print(struct List* head)
{
struct List* p;
p = head->next;
while (p != NULL)
{
printf("%d\n", p->num);
p = p->next;
}
}
int main()
{
struct List* p; //初始化一个链表
p = creat(); //调用创建函数来创建一个链表
deleteHead(p);
print(p);
printf("\n");
p = addList(p, 1); //从尾巴添加一个10
p = addList(p, 2); //从尾巴添加一个10
p = addList(p, 3); //从尾巴添加一个10
p = addList(p, 4); //从尾巴添加一个10
p = addList(p, 5); //从尾巴添加一个10
p = addList(p, 6); //从尾巴添加一个10
p = addList(p, 7); //从尾巴添加一个10
p = addList(p, 8); //从尾巴添加一个10
p = addList(p, 9); //从尾巴添加一个10
p = addList(p, 10); //从尾巴添加一个10
print(p);
printf("\n");
p = deleteList(p, 3); //删除元素为3的节点
print(p);
printf("\n");
deleteTail(p);
print(p);
printf("\n");
deleteHead(p);
print(p);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)