「已注销」 2023-03-27 23:54 采纳率: 71.4%
浏览 104
已结题

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

【问题描述】删除单链表(带头结点,头插入法建立单链表)的第i个结点

【样例输入1】

                   5

                   6 7 8 9 10

                   3

【样例输出1】 10 9 7 6

【样例输入2】

                 1

                 8

                 1

【样例输出2】 null

【样例输入3】

                 1

                 8

                 2

【样例输出2】 error

【样例说明】第一行输入链表长度5,第二行依次输入链表元素,以空格间隔,第三行输入删除的元素序列3.

                 以空格间隔依次输出删除后的单链表元素,若为空表则输出null,若为无效删除,则输出error
#include<iostream>
#include<malloc.h> 
#define ERROR 0
#define OK 1
using namespace std;
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*linklist;
void Initlist(linklist &L)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
}
void creatlist(linklist &L,int n)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
    for(int i=0;i<n;i++) 
    {
        LNode *p;
        p=(LNode*)malloc(sizeof(LNode));
        cin>>p->data;
        p->next=L->next;
        L->next=p;
    }
}
int Listdelete(linklist &L,int i)
{
    LNode *p,*q;
    int j=0;
    while(p->next&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return ERROR;
    q=p->next;
    p->next=q->next;
    delete q;
    return OK;
}
void print(linklist &L)
{
    LNode *p;
    p=L->next;
    if(p)
    {    while(p)
        {
            cout<<p->data ;
              p=p->next;
        }
    }
    else if(p==NULL)
        cout<<"null";
    else
        cout<<"error";
                
}
int main()
{
    int n,i;
    cin>>n;
    linklist L;
    Initlist(L);
    creatlist(L,n);
    cin>>i;
    Listdelete(L,i);
    print(L);
    return 0;
}

运行不出来该怎么改?

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-03-28 09:02
    关注

    整体修改如下,改动处见注释,供参考:

    #include <iostream>
    #include <malloc.h> 
    #define ERROR 0
    #define OK 1
    using namespace std;
    typedef struct LNode
    {
        int    data;
        struct LNode* next;
    }LNode, * linklist;
    void Initlist(linklist& L)
    {
        L = (LNode*)malloc(sizeof(LNode));
        L->next = NULL;
    }
    void creatlist(linklist L, int n)  //修改
    {
        //L = (LNode*)malloc(sizeof(LNode)); 这里两行多余,前面已经有初始化函数
        //L->next = NULL;                    修改
        for (int i = 0; i < n; i++)
        {
            LNode* p;
            p = (LNode*)malloc(sizeof(LNode));
            cin >> p->data;
            p->next = L->next;
            L->next = p;
        }
    }
    int Listdelete(linklist L, int i) //修改
    {
        LNode* p = L, * q;  // 修改
        int j = 0;
        if (i < 1)          // 修改
            return ERROR;
        while (p->next && j < i - 1)
        {
            p = p->next;
            ++j;
        }
        if (!p->next) //|| j > i - 1) 修改
            return ERROR;
        q = p->next;
        p->next = q->next;
        free(q);      //delete q; 修改
        return OK;
    }
    void print(linklist L) //修改
    {
        LNode* p;
        p = L->next;
        if (p)
        {
            while (p)
            {
                cout << p->data << " ";  //修改
                p = p->next;
            }
        }
        else //if (p == NULL)  修改
            cout << "null";
        //else                修改
        //    cout << "error";  修改
    }
    int main()
    {
        int n, i;
        cin >> n;
        linklist L;
        Initlist(L);
        creatlist(L, n);
        cin >> i;
        if (ERROR == Listdelete(L, i)) //修改
            cout << "error";           //修改  
        else                           //修改    
            print(L);                  //修改  
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月27日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度