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

牛牛的链表删除

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

#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode
{
    int data;
    struct ListNode* next;
}ListNode;

ListNode* Creat_list(int* arr,int n)
{
    ListNode *La = (ListNode*)malloc(sizeof(ListNode));
    La -> data = arr[0];
    La -> next = NULL;
    ListNode* r = La;
    for(int i = 1; i<n; i++)
    {
        ListNode* s = (ListNode*)malloc(sizeof(ListNode));
        s -> data = arr[i];
        s -> next = NULL;
        r -> next = s;
        r = s;
    }
    return La;
}

ListNode* DeleteNode(ListNode* La,int d)
{
    ListNode* head = (ListNode*)malloc(sizeof(ListNode));
    head -> next = La;
    
    ListNode *pa = head,*pb = La;
    while(pb)
    {
         if(pb -> data == d)
         {
            pa -> next = pb -> next;
            free(pb);
            pb = pa -> next;
         }
         else
         {
            pa = pa -> next;
            pb = pb -> next;
         }
    }
    return La;
}

void PrintList(ListNode* La)
{
   ListNode* pa = La;
   while(pa)
   {
    printf("%d ",pa -> data);
    pa = pa -> next;
   }
}

int main() {
    int n = 0,d = 0;
    scanf("%d%d",&n,&d);
    int arr[n];
    for(int i = 0; i<n; i++)
        scanf("%d",&arr[i]);
    ListNode* La = Creat_list(arr,n);
    La =  DeleteNode(La,d);
    PrintList(La);
    return 0;
}

重在链表元素的删除:引入头结点,双移动指针进行删除。

全部评论

相关推荐

2025-12-17 12:08
门头沟学院 产品经理
牛客85811352...:1希音不知道算不算大厂 2完全符合,过得很舒服, 3确实只有杂活 领导找我续签到明年3、4月我要继续吗。主要是边实习边秋招这段时间还是有点累
什么是优秀的实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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