LMEH262 2018-09-21 09:58 采纳率: 75%
浏览 420
已采纳

关于链表添加值的问题?

以下是建立的链表,在没有进行添加值操作之前是可以正常打印链表值的,但是在进行了添加
操作后,链表就无法正常打印了。
代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef struct MyNode{
    int id;
    struct MyNode* pFront; 
    struct MyNode* pNext; 
}LISTNODE;
int main(){
    LISTNODE* pHead = NULL;
    LISTNODE* pTemp = NULL;

    for (int i = 0; i < 10; i++){
        pTemp = (LISTNODE*)malloc(sizeof(LISTNODE));
        pTemp->id = (i + 1) * 10;
        pTemp->pNext = pHead;
        if (pHead)
            pHead->pFront = pTemp;
        pTemp->pFront = NULL;
        pHead = pTemp;
    }

    int newVal = 112;
    LISTNODE* pNew = NULL;
    pNew->id = newVal;
    pNew->pNext = NULL;
    pNew->pFront = NULL;

    if (pHead){
        if (pNew->id > pHead->id){
            pNew->pNext = pHead;
            pHead->pFront = pNew;
            pHead = pNew;
        }
        else{
            LISTNODE* P = pHead;
            while (P->pNext){
                if (pNew->id > P->pNext->id){
                    pNew->pNext = P->pNext;
                    pNew->pFront = P;
                    pNew->pNext->pFront = pNew;
                    pNew->pFront->pNext = pNew;
                    break;
                }
                P = P->pNext;
            }
            P->pNext = pNew;
            pNew->pFront = P;
        }
    }
    else{
        pHead = pNew;
    }

    pTemp = pHead;
    while (pTemp){
        printf("%d\n", pTemp->id);
        if (pTemp->pNext == NULL)
            break;
        pTemp = pTemp->pNext;
    }
    while (pTemp){
        printf("%d\n", pTemp->id);
        pTemp = pTemp->pFront;
    }

    while (pHead){
        pTemp = pHead;
        pHead = pHead->pNext;
        free(pHead);
    }
    pHead = pTemp = NULL;
    return 0;
}

图片说明

  • 写回答

1条回答

  • threenewbee 2018-09-21 12:46
    关注
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct MyNode{
        int id;
        struct MyNode* pFront; 
        struct MyNode* pNext; 
    }LISTNODE;
    int main(){
        LISTNODE* pHead = NULL;
        LISTNODE* pTemp = NULL;
    
        for (int i = 0; i < 10; i++){
            pTemp = (LISTNODE*)malloc(sizeof(LISTNODE));
            pTemp->id = (i + 1) * 10;
            pTemp->pNext = pHead;
            if (pHead)
                pHead->pFront = pTemp;
            pTemp->pFront = NULL;
            pHead = pTemp;
        }
    
        int newVal = 112;
        LISTNODE* pNew = (LISTNODE*)malloc(sizeof(LISTNODE));
        pNew->id = newVal;
        pNew->pNext = NULL;
        pNew->pFront = NULL;
    
        if (pHead){
            if (pNew->id > pHead->id){
                pNew->pNext = pHead;
                pHead->pFront = pNew;
                pHead = pNew;
            }
            else{
                LISTNODE* P = pHead;
                while (P->pNext){
                    if (pNew->id > P->pNext->id){
                        pNew->pNext = P->pNext;
                        pNew->pFront = P;
                        pNew->pNext->pFront = pNew;
                        pNew->pFront->pNext = pNew;
                        break;
                    }
                    P = P->pNext;
                }
                P->pNext = pNew;
                pNew->pFront = P;
            }
        }
        else{
            pHead = pNew;
        }
    
        pTemp = pHead;
        while (pTemp){
            printf("%d\n", pTemp->id);
            if (pTemp->pNext == NULL)
                break;
            pTemp = pTemp->pNext;
        }
        while (pTemp){
            printf("%d\n", pTemp->id);
            pTemp = pTemp->pFront;
        }
    
        while (pHead){
            pTemp = pHead;
            pHead = pHead->pNext;
            free(pTemp);
        }
        pHead = pTemp = NULL;
        return 0;
    }
    
    
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误