2022-12-03 c习题11-8 单链表结点删除

前两周在忙着科目一考试跟摆烂,所以没每天敲代码。

昨天做了道题 原地址题目详情 - 习题11-8 单链表结点删除 (pintia.cn)

#include <stdio.h>

#include <stdlib.h>

struct ListNode {

    int data;

    struct ListNode* next;

};

struct ListNode* readlist();

struct ListNode* deletem(struct ListNode* L, int m);

void printlist(struct ListNode* L)

{

    struct ListNode* p = L;

    while (p) {

        printf("%d ", p->data);

        p = p->next;

    }

    printf("\n");

}

int main()

{

    int m;

    struct ListNode* L = readlist();

    scanf("%d", &m);

    L = deletem(L, m);

    printlist(L);

    return 0;

}

struct ListNode* readlist() //录入新数据至链表

    /* 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。

    当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。*/

{

    struct ListNode* header = malloc(sizeof(struct ListNode));//创建头结点

    header->data = -1;

    header->next = NULL;

  struct ListNode* pRear = header;//尾部指针。不需要分配动态内存。直接指向头结点

    int val = -1;

    scanf("%d", &val);

    while (val != -1)

    {

        struct ListNode* Newnode = malloc(sizeof(struct ListNode));//新节点

        Newnode->data = val;

        Newnode->next = NULL;

        pRear->next = Newnode; //将还在头部的指针指向Newnode;

        pRear = Newnode;//尾部指针指向新节点

        scanf("%d", &val);

    }

    while (val == -1)

    {

        break;

    }

    return header;

}

struct ListNode* deletem(struct ListNode* L, int m)

    //函数deletem将单链表L中所有存储了m的结点删除。

    //返回指向结果链表头结点的指针。

{

    if (L->next==NULL)

    {

        printf("error!\n");

        return NULL;

    }

    struct ListNode* h1 = NULL;

    struct ListNode* p1 = NULL;

    struct ListNode* pcurrent = L->next;

    while (pcurrent != NULL)

    {

        if (pcurrent->data != m)

        {

            struct ListNode* p = malloc(sizeof(struct ListNode));

                p->data = pcurrent->data;

                p->next = NULL;

                if (h1 == NULL)

                h1 = p;

                else  p1->next = p;

                p1 = p;

        }

        pcurrent = pcurrent->next;

    }

    return h1;

}

我新创了一个新链表来放非m的值,再把新链表h1return回去,这样可以更简单的解决问题。

输出结果


其他输入测试


新增的一小部分

有新增的一小部分是:我使只输入-1后的结果输出error。


注意:没有在pta上试错评分,谨慎借鉴,可能有条件不足之处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容