打印错误的链表c++

wrong print of linked list c++

本文关键字:c++ 链表 错误 打印      更新时间:2023-10-16

你能解释一下,为什么函数"print"在这个代码中无限打印同一个数字吗?

显然,链表的构造是正确的,但在一步一步调试的过程中,它坚持使用"打印"功能。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct num {
    int n;
    num* next;};
void add (num*&head, int size) {
    num*newnode = new num;
    for (int i = 0; i<size; i++) {
        newnode->n = rand()%100;
        newnode->next = head;
        head = newnode;}
}
void print (num*head) {
    num*temp = head;
    while (temp != 0) {
        cout << temp->n << endl;
        temp = temp ->next;}}
void del (num*&head) {
    num*temp = 0;
    while (head!=0){
        temp = head;
        head = head->next;
        delete temp;}}
int main () {
srand ((unsigned int)time(0));
num*head = 0;
add (head, 10);
print (head);
del (head);
cin.get();
cin.ignore();
}

问题出在add函数中。您没有创建新节点。而是修改同一节点并将其指向自身。

像这样改变

    for (int i = 0; i<size; i++) {
        newnode = new num; //new node
        newnode->n = rand()%100;
        newnode->next = head;
        head = newnode;}

您在add函数中的列表中创建一个循环

newnode->next = head;
head = newnode;

所以只有一个节点,它的next指向headhead指向这个节点。如果你在循环中移动num*newnode = new num;,你就会解决这个问题。