题解 | #牛牛的链表删除#

牛牛的链表删除

https://www.nowcoder.com/practice/d3df844baa8a4c139e103ca1b1faae0f

#include <stdio.h>
#include<malloc.h>
struct Node            //创建链表类型
{
    int data;
    struct Node* pNext;
};

struct Node* Creat_List(intpArr,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);
}
全部评论

相关推荐

渴望wlb的牛油果很...:直说卡第一学历不就行了 非得拐弯抹角
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务