终有花开见月明 2022-08-03 18:02 采纳率: 75%
浏览 34
已结题

在学习链表的时候,在插入链表的时候,使用头插法遇到了问题。

问题遇到的现象和发生背景

在学习链表的时候,使用头插法遇到了问题。

问题相关代码,请勿粘贴截图

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

struct Node {
int date;
struct Node* next;
};

/*创建链表头 /
struct Node createList()
{
struct Node
headNode = (struct Node
)malloc(sizeof(struct Node));

headNode->date = 1;
headNode->next = NULL;
return headNode;

}

/创建节点/
struct Node* createNode(int data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->date = data;
newNode->next = NULL;

return newNode;

}
/打印链表/
void printList(struct Node* headNode)
{
struct Node* pmove;
pmove = headNode->next;

while (pmove)
{
    printf("%d", pmove->date);
    pmove = pmove->next;

}
printf("\n");

}

/插入节点,插入哪个链表,插入节点的数据是多少,头插法/
void inserNodebyHead(struct Node* headNode, int data)
{
/创建新的节点/
struct Node* newNode = createNode(data);

newNode->next = headNode->next;
//newNode = headNode->next;   ** //使用这一句代码时,不能正常打印出链表的成员,而下面那句代码却可以**
headNode->next = newNode;

}

int main()
{
struct Node* list = createList();

inserNodebyHead(list, 1);
inserNodebyHead(list, 2);
inserNodebyHead(list, 3);
printList(list);
  

return 0;

}
/正确运行的输出结果是321,而使用那句问题代码时,却什么都没有打印,好想知道问题出在哪/

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-08-03 20:52
    关注

    这是带头结点的链表,headNode->next 指向链表的第一个结点,而void inserNodebyHead(struct Node* headNode, int data)插入函数是头插法,newNode 是待插入的新结点,所以头插法就是:newNode->next = headNode->next; 这句将新结点尾指针 newNode->next 指向链表的第一个结点,即headNode->next; 指向的结点。
    headNode->next = newNode; 这句实现将头结点的尾指针指向待插入新结点 newNode,让 newNode 成为链表的第一个结点。所谓头插法,是每次把新结点插入到链表的第一个结点位置,所以上面的代码没问题。

    #include <stdio.h>
    #include <stdlib.h>
    
    struct Node {
        int date;
        struct Node* next;
    };
    
    //创建链表头
    struct Node* createList()
    {
        struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
        headNode->date = 1;
        headNode->next = NULL;
        return headNode;
    }
    
    //创建节点
    struct Node* createNode(int data)
    {
        struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
        newNode->date = data;
        newNode->next = NULL;
        return newNode;
    }
    //打印链表
    void printList(struct Node* headNode)
    {
        struct Node* pmove;
        pmove = headNode->next;
        while (pmove)
        {
            printf("%d", pmove->date);
            pmove = pmove->next;
        }
        printf("\n");
    }
    
    //插入节点,插入哪个链表,插入节点的数据是多少,头插法
    void inserNodebyHead(struct Node* headNode, int data)
    {
        //创建新的节点
        struct Node* newNode = createNode(data);
        newNode->next = headNode->next; //将新结点尾指针 newNode->next 指向链表的第一个结点,即headNode->next;
        //newNode = headNode->next; //这句是使新结点的指针newNode 指向头结点的尾指针 headNode->next?
        headNode->next = newNode;//将头结点的尾指针headNode->next指向待插入新结点  newNode,让 newNode 成为链表的第一个结点。
    }
    
    int main()
    {
        struct Node* list = createList();
    
        inserNodebyHead(list, 1);
        inserNodebyHead(list, 2);
        inserNodebyHead(list, 3);
        printList(list);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取
  • ¥15 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧