Lzr92 2022-07-27 11:44 采纳率: 33.3%
浏览 20
已结题

关于#链表#的问题,如何解决?

为什么我的链表在mergelist的循环体中会不断循环?这是什么原因?

#include <iostream>
using namespace std;
typedef struct LNode
{
    int data;
    struct LNode *next;
} LNode;
void createlistR(LNode *&L, LNode *&P)
{
    int i;
    LNode *s, *t;
    P, L = (LNode *)malloc(sizeof(LNode));
    L->next, P->next = NULL;
    s = L;
    for (i = 0; i < 10; i++)
    {
        t = (LNode *)malloc(sizeof(LNode));
        t->data = 2 * i + 1;
        s->next = t;
        s = t;
    }
    s->next = NULL;
    s = P;
    for (i = 0; i < 10; i++)
    {
        t = (LNode *)malloc(sizeof(LNode));
        t->data = 3 * i + 1;
        s->next = t;
        s = t;
    }
    s->next = NULL;
}
void createlistF(LNode *&L)
{
    int i;
    LNode *s, *t;
    L = (LNode *)malloc(sizeof(LNode));
    L->next = NULL;
    s = L;
    for (i = 0; i < 10; i++)
    {
        t = (LNode *)malloc(sizeof(LNode));
        t->data = 3 * i + 1;
        t->next = s->next;
        s->next = t;
    }
}
int traveselist(LNode *L)
{
    if (L->next == NULL)
    {
        return false;
    }
    while (L->next != NULL)
    {
        cout << L->next->data << " " << endl;
        L = L->next;
    }
    cout << "完成" << endl;
    return true;
}
void mergelist(LNode *A, LNode *B, LNode *&C)
{
    LNode *S, *L, *P;
    C = (LNode *)malloc(sizeof(LNode));
    C->next = NULL;
    S = C;
    L = A;
    P = B;
    while (L->next != NULL && P->next != NULL)
    {
        cout << "L->next->data:" << L->next->data << endl;
        cout << "p->next->data: " << P->next->data << endl;
        if (L->next->data <= P->next->data)
        {
            cout << "1" << endl;
            cout << "L->next->data:" << L->next->data << endl;
            cout << "p->next->data: " << P->next->data << endl;
            S->next = L->next;
            S = S->next;
            L = L->next;
            cout << "S->data:" << S->data << endl;
            cout << "L->next->data:" << L->next->data << endl;
            cout << "p->next->data: " << P->next->data << endl;
        }
        else
        {
            S->next = P->next;
            S = S->next;
            P = P->next;
        }
    }
    if (L->next != NULL)
    {
        S->next = L->next;
    }
    if (P->next != NULL)
    {
        S->next = P->next;
    }
}
int main()
{
    LNode *L, *P, *C;
    createlistR(L, P);
    traveselist(L);
    createlistF(L);
    traveselist(L);
    traveselist(P);
    createlistR(L, P);
    traveselist(L);
    traveselist(P);
    mergelist(L, P, C);
    traveselist(C);
}


img

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-07-28 10:50
    关注

    修改如下,供参考:

    #include <iostream>
    using namespace std;
    typedef struct LNode
    {
        int data;
        struct LNode* next;
    } LNode;
    void createlistR(LNode*& L, LNode*& P)
    {
        int i;
        LNode* s, * t;
        L = (LNode*)malloc(sizeof(LNode));//P, L = (LNode*)malloc(sizeof(LNode));
        P = (LNode*)malloc(sizeof(LNode));
        L->next = NULL, P->next = NULL;    //修改
        s = L;
        for (i = 0; i < 10; i++)
        {
            t = (LNode*)malloc(sizeof(LNode));
            t->data = 2 * i + 1;
            s->next = t;
            s = t;
        }
        s->next = NULL;
        s = P;
        for (i = 0; i < 10; i++)
        {
            t = (LNode*)malloc(sizeof(LNode));
            t->data = 3 * i + 1;
            s->next = t;
            s = t;
        }
        s->next = NULL;
    }
    void createlistF(LNode*& L)
    {
        int i;
        LNode* s, * t;
        L = (LNode*)malloc(sizeof(LNode));
        L->next = NULL;
        s = L;
        for (i = 0; i < 10; i++)
        {
            t = (LNode*)malloc(sizeof(LNode));
            t->data = 3 * i + 1;
            t->next = s->next;
            s->next = t;
        }
    }
    int traveselist(LNode* L)
    {
        if (L->next == NULL)
        {
            return false;
        }
        while (L->next != NULL)
        {
            cout << L->next->data << " "; //修改
            L = L->next;
        }
        cout << "完成" << endl;
        return true;
    }
    void mergelist(LNode* A, LNode* B, LNode*& C)
    {
        LNode* S, * L, * P;
        C = (LNode*)malloc(sizeof(LNode));
        C->next = NULL;
        S = C;
        L = A->next;  //修改
        P = B->next;  //修改
        while (L != NULL && P != NULL) //修改
        {
            //cout << "L->data:" << L->data << endl;
            //cout << "p->data: " << P->data << endl;
            if (L->data < P->data)   //if (L->next->data <= P->next->data) //修改
            {
                cout << "1" << endl;
                cout << "L->data:" << L->data << endl;
                cout << "p->data: " << P->data << endl;
                S->next = L;  //修改
                S = L;   //修改
                L = L->next;  
                cout << "S->data:" << S->data << endl;
            }
            else
            {
                S->next = P;  //修改
                S = P;  //修改
                P = P->next;
            }
        }
        if (L != NULL)//修改
        {
            S->next = L;//修改
        }
        if (P != NULL)//修改
        {
            S->next = P;//修改
        }
    }
    int main()
    {
        LNode* L, * P, * C;
        createlistR(L, P);
        traveselist(L);
        traveselist(P);
        mergelist(L, P, C);
        traveselist(C);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月6日
  • 已采纳回答 7月29日
  • 创建了问题 7月27日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?