我比小白还小白 2022-02-02 01:57 采纳率: 87.5%
浏览 49
已结题

很不齿的向大家请教题了= =,虽说让自学,但我真的是搞不懂链表这东西啊

单向链表的删除
在单向链表代码基础上,增加删除节点的函数,实现在链表中删除所有节点的data 为指定数值的节点。

删除节点函数接口:
struct link * DeleteNode(struct link *head,int data);
head 是链表头节点的指针
data是要删除的节点的数值。
函数返回删除相应节点后,头节点的指针。
主函数示例:



#include <stdio.h>
#include <stdlib.h>
struct link
{
    int data;
    struct link *next;
};

struct link *AppendNode(struct link *head,int data);
void DisplyNode(struct link *head);
void DeleteMemory(struct link *head);
struct link * DeleteNode(struct link *head,int data);

int main()
{
    char    c;
    int data = 0;
    struct link *head = NULL;      /* 链表头指针 */
    while (1)
    {
        scanf("%d",&data);
        if (data==-1)
            break;

        head = AppendNode(head,data);/* 向head为头指针的链表末尾添加节点 */
    }
    DisplyNode(head);        /* 显示当前链表中的各节点信息 */
    scanf("%d",&data);
    head = DeleteNode(head,data);
    DisplyNode(head);        /* 显示当前链表中的各节点信息 */
    DeleteMemory(head);           /* 释放所有动态分配的内存 */
    return 0;
}

输入格式:
第一行: 一系列以-1结束的数值,用以构建单向链表。

第二行: 指定的数值

输出格式:
在构建单向链表后,显示整个链表。 在删除指定数值后,再次显示整个链表。

输入样例:
在这里给出一组输入。例如:

1 3 5 7 9 -1
5
输出样例:
在这里给出相应的输出。例如:

1->3->5->7->9
1->3->7->9
输入样例:
在这里给出一组输入。例如:

1 3 5 3 1 -1
3
输出样例:
在这里给出相应的输出。例如:

1->3->5->3->1
1->5->1

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-02-02 10:19
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    struct link
    {
        int data;
        struct link* next;
    };
    struct link* AppendNode(struct link* head, int data);
    void DisplyNode(struct link* head);
    void DeleteMemory(struct link* head);
    struct link* DeleteNode(struct link* head, int data);
    
    int main()
    {
        char c = 0;
        int data = 0;
        struct link* head = NULL;      /* 链表头指针 */
        while (1)
        {
            scanf("%d", &data);
            if (data == -1)
                break;
            head = AppendNode(head, data);/* 向head为头指针的链表末尾添加节点 */
        }
        DisplyNode(head);        /* 显示当前链表中的各节点信息 */
        scanf("%d", &data);
        head = DeleteNode(head, data);
        DisplyNode(head);        /* 显示当前链表中的各节点信息 */
        DeleteMemory(head);           /* 释放所有动态分配的内存 */
        return 0;
    }
    struct link* AppendNode(struct link* head, int data)
    {
        struct link* p = head;
        if (head == NULL) {
            head = (struct link*)malloc(sizeof(struct link));
            head->next = NULL;
            head->data = data;
        }
        else {
            while (p->next) 
                p = p->next;
            p->next = (struct link*)malloc(sizeof(struct link));
            p->next->next = NULL;
            p->next->data = data;
        }
        return head;
    }
    void DisplyNode(struct link* head)
    {
        struct link* p = head;
        if (head == NULL)
            return;
        while (p) {
            printf(p == head ? "%d" : "->%d", p->data);
            p = p->next;
        }
        printf("\n");
    }
    struct link* DeleteNode(struct link* head, int data)
    {
        struct link* p = head, * pre = NULL;
        while (p) 
        {
            if (p->data == data){
                if (p == head) {
                    head = p->next;
                    free(p);
                    p = head;
                }
                else {
                    pre->next = p->next;
                    free(p);
                    p = pre;
                }
            }
            else {
                pre = p;
                p = p->next;
            }
        }
        return head;
    }
    void DeleteMemory(struct link* head)
    {
        struct link* p;
        if (head == NULL)
            return;
        while (head) {
            p = head;
            head = p->next;
            free(p);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 修改了问题 2月2日
  • 创建了问题 2月2日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址