e555666ee 2023-03-31 12:58 采纳率: 37.5%
浏览 35
已结题

删除单链表(带头结点,头插入法建立单链表)的第i个结点

谁方便帮我看一下程序吗?卡住了,问题是:删除单链表(带头结点,头插入法建立单链表)的第i个结点


#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct Node
{
    int data;
    struct Node*next;
}Node,*LinkList;
void Initlist(LinkList &L)
{
    L=(Node*)malloc(sizeof(Node));
    L->next=NULL;
}
void Creatlist(LinkList &L,int a[100],int n)
{
L= (Node *)malloc(sizeof(Node));
    L->next = NULL;   
 
    LinkList p;  
    for (int i = 0; i < n; i++) {
        p = (LinkList )malloc(sizeof(LinkList));  
        p->data = a[i];   
        p->next = L->next;   
        L->next=p;

    }
}
int deleteList (LinkList &L,int m)
{
    if(m<1)
    {
        printf("error\n");
        return 0;
    }
    int i=0;
    LinkList q,p;
    while(q!=NULL&&i<m)
    {
        i++;
        q=q->next;
    }
    p=q->next;
    q->next=p->next;
    free(p);
    return 1;
}
void OutputList(LinkList &L)
{
    LinkList s;
    s=L->next;
    while(s)
    {
        cout<<s->data<<' ';
        s=s->next;

}
int main()
{
    int n,m,a[100];
    cin>>n;
    LinkList L;
    Initlist(L);
    Creatlist(L,a,n);
    cin>>m;
    if(deleteList(L,m))
    OutputList(L);
    if(L->next==NULL)
    cout<<"null";
    return 0;
}
  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-03-31 13:49
    关注

    整体错误修改如下,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    using namespace std;
    typedef struct Node
    {
        int data;
        struct Node* next;
    }Node, * LinkList;
    void Initlist(LinkList& L)
    {
        L = (Node*)malloc(sizeof(Node));
        L->next = NULL;
    }
    void Creatlist(LinkList& L, int a[100], int n)
    {
        //L = (Node*)malloc(sizeof(Node)); L已经初始化过了,这里就多余了。
        //L->next = NULL;                  修改 这两句多余了。
        LinkList p;
        for (int i = 0; i < n; i++) {
            p = (LinkList)malloc(sizeof(Node));    // 修改   
             //(LinkList)malloc(sizeof(LinkList));
            p->data = a[i];
            p->next = L->next;
            L->next = p;
        }
    }
    int deleteList(LinkList& L, int m)
    {
        if (m < 1)
        {
            printf("error\n");
            return 0;
        }
        int i = 0;
        LinkList q = L, p = NULL;    // 修改
        while (q->next != NULL && i < m - 1)   //(q != NULL && i < m) 修改
        {
            i++;
            q = q->next;
        }
        if (!q->next) {            // 修改
            printf("error\n");     // 修改
            return 0;              // 修改
        }
        p = q->next;
        q->next = p->next;
        free(p);
        return 1;
    }
    void OutputList(LinkList& L)
    {
        LinkList s = NULL;
        if (L->next == NULL)   //修改
            cout << "null";
        else {                 //修改
            s = L->next;
            while (s)
            {
                cout << s->data << ' ';
                s = s->next;
            }
            printf("\n");
        }
    }
    
    int main()
    {
        int n, m, a[20] = { 1,3,5,7,8,9,10,15,14,22,47,25,41,45,66,44,99,102,111,200 };  //修改
        cin >> n;
        LinkList L;
        Initlist(L);
        Creatlist(L, a, n);
        OutputList(L);     //修改
    
        cin >> m;
        deleteList(L, m); //if (deleteList(L, m)) //修改
        OutputList(L);
                         //if (L->next == NULL)   //修改
                         //cout << "null";        //修改
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答