题解 | #牛牛的链表删除#
牛牛的链表删除
https://www.nowcoder.com/practice/d3df844baa8a4c139e103ca1b1faae0f
#include <stdio.h>
#include<malloc.h>
struct Node //创建链表类型
{
int data;
struct Node* pNext;
};
struct Node* Creat_List(int* pArr,int len) //将数组转化存储为链表
{
int i;
struct Node* pHead = (struct Node*)malloc(sizeof(struct Node));
pHead->pNext = NULL;
struct Node* pTail = pHead;
for(i=0;i<len;i++)
{
struct Node* pNew = (struct Node*)malloc(sizeof(struct Node));
pNew->data = pArr[i];
pNew->pNext = NULL;
pTail->pNext = pNew;
pTail = pNew;
}
return pHead;
}
void Delete_List(struct Node* pHead,int dele) //定义函数,删除链表中数值为dele的结点
{
struct Node* p = pHead,*p1 = p->pNext,*p2 = p1->pNext;
do
{
if(dele == p1->data)
{
p->pNext = p2;
free(p1); //释放对应结点的内存
}
p = p->pNext;
p1 = p->pNext;
p2 = p1->pNext;
}while(p2!=NULL); //使用do-while结构,可以确保最后的尾结点能被访问到
}
void Traverse_List(struct Node* pHead) //遍历打印链表
{
struct Node* p = pHead->pNext;
while(p->pNext != NULL)
{
printf("%d ",p->data);
p = p->pNext;
}
printf("%d",p->data);
}
int main()
{
int len,i,delete;
scanf("%d",&len);
scanf("%d",&delete);
int* pArr = (int*)malloc(len*sizeof(int));
for(i=0; i<len; i++)
{
scanf("%d",&pArr[i]);
}
struct Node* pHead = Creat_List(pArr, len);
Delete_List(pHead, delete);
Traverse_List(pHead);
}

海康威视公司福利 1121人发布