链表删除节点
2023-09-14 09:13:37 时间
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode
{
int num;
LinkNode* next;
}Lk, * lk;
//有头链表的初始化
lk initLinkNode()
{
//创建头结点
lk headNode = (lk)malloc(sizeof(Lk));
//检验头结点分配内存是否成功
if (headNode == NULL)
{
return NULL;
}
//初始化头结点
headNode->num = -1; //头结点不维护数据域,这行代码可写可不写
headNode->next = NULL;
//记录节点位置,方便插入新的数据
lk currentNode = headNode;
//让用户输入几个数,如果输入-1,结束输入
int val = -1;
while (1)
{
printf("请给当前链表赋值,输入-1结束输入:\n");
scanf("%d", &val);
if (val == -1)
{
break;
}
//开辟一个新节点存放数据
lk node = (lk)malloc(sizeof(Lk));
node->num = val;
node->next = NULL;
//利用记录当前位置的指针,将链表中最后一个节点与新开辟的节点相连接
currentNode->next = node;
//将记录当前位置的指针指向新的节点
currentNode = currentNode->next;
}
return headNode;
}
//遍历链表
void for_each_linkList(lk headNode)
{
if (headNode == NULL)
{
return;
}
//利用一个记录当前节点的指针,来遍历输出整个链表
lk curNode = headNode->next;
//循环结束条件:curNode指针为空
while (curNode)
{
printf("%d\n", curNode->num);
curNode = curNode->next;
}
}
//删除节点
void delete_LinkList(lk headNode,int val)
{
if (headNode == NULL)
{
return;
}
//创建一前一后两个指针
lk prveNode = (lk)malloc(sizeof(Lk));
lk curNode = (lk)malloc(sizeof(Lk));
prveNode = headNode;
curNode = headNode->next;
//遍历链表
while (curNode)
{
if (curNode->num == val)
break;
//移动辅助指针
prveNode = curNode;
curNode = curNode->next;
}
//没找到的情况
if (curNode == NULL)
{
return;
}
//更改指针指向进行删除
prveNode->next = curNode->next;
//删除掉待删除的节点,释放节点在堆区开辟的内存空间
free(curNode);
curNode = NULL;
}
int main()
{
lk headNode = initLinkNode();
delete_LinkList(headNode, 20);
printf("链表遍历结果为:\n");
for_each_linkList(headNode);
return 0;
}
图画说明:特殊情况也适用
相关文章
- 删除链表倒数第n个节点
- 从尾到头打印链表
- 电子词典--两次扫描文件发/链表法
- Java实现 LeetCode 382 链表随机节点
- Java实现 LeetCode 237 删除链表中的节点
- Java实现 LeetCode 92 反转链表 II
- Java实现 LeetCode 61 旋转链表
- Java实现 LeetCode 24 两两交换链表中的节点
- Java实现 LeetCode 19删除链表的倒数第N个节点
- Java实现 LeetCode 19删除链表的倒数第N个节点
- linux内核数据结构之链表
- LeetCode:114_Flatten Binary Tree to Linked List | 将一棵二叉树变成链表的形式 | Medium
- Leetcode.1019 链表中的下一个更大节点
- 删除链表的倒数n个节点
- 【LeetCode 19】删除链表的倒数第N个节点
- C语言入门之链表
- 24. 两两交换链表中的节点-力扣双百代码
- 剑指 Offer 52. 两个链表的第一个公共节点-等长查找法
- c 链表拼接
- [LeetCode] 382. 链表随机节点 ☆☆☆(随机算法:蓄水池抽样)
- [LeetCode] 19. 删除链表的倒数第N个节点 ☆☆☆
- 约瑟夫解决问题的循环链表
- LeetCode 382. 链表随机节点