为啥这个链表程序没有给出任何输出?

Posted

技术标签:

【中文标题】为啥这个链表程序没有给出任何输出?【英文标题】:Why is this linked list program not giving any output?为什么这个链表程序没有给出任何输出? 【发布时间】:2021-08-26 12:21:18 【问题描述】:

所以我做了这两个关于链表的简单函数。一个在前面添加一个节点,另一个只是从头到尾按顺序显示链表。我想知道为什么这段代码不会给我任何输出。

#include <iostream>
using namespace std;

class Node

    public:
        int data;
        Node *next;
;
Node *head;

void addFront(Node *head, int item)

    Node *temp = new Node();
    temp->data = item;
    temp->next = head;
    head = temp;

void traverse(Node *head)

    Node *temp = head;
    while(temp!=NULL)
    
        cout << temp->data << " ";
        temp = temp->next;
    


int main()

    addFront(head, 1);
    addFront(head, 2);
    addFront(head, 3);
    traverse(head);


【问题讨论】:

因为在循环开始之前traverse()中的temp为NULL。 不得不抱怨 C 风格的链表是用 C++ 教授的。 【参考方案1】:

您正在对addFront() 中的head 指针的副本进行操作。你有 将指针传递给指针:

void addFront(Node **head, int item)

整个代码可能如下所示:

#include <iostream>
using namespace std;

class Node

public:
  int data;
  Node *next;
;
Node *head;

void addFront(Node **head, int item)

  Node *temp = new Node();
  temp->data = item;
  temp->next = *head;
  *head = temp;


void traverse(Node *head)

  Node *temp = head;
  while(temp!=NULL)
    
      cout << temp->data << " ";
      temp = temp->next;
    


int main()

  addFront(&head, 1);
  addFront(&head, 2);
  addFront(&head, 3);
  traverse(head);

【讨论】:

我想就是这样。谢谢。 那么您应该将答案标记为已接受,@GauravSingh。 @GauravSingh:如果您喜欢这个答案,请将其标记为已解决,让其他用户知道您的问题已解决。另见What should I do when someone answers my question?【参考方案2】:

addFront 的参数既是输入也是输出。 (节点*头) 它需要作为引用传递

【讨论】:

以上是关于为啥这个链表程序没有给出任何输出?的主要内容,如果未能解决你的问题,请参考以下文章

在有序链表中插入数据

为啥我的链表内容在退出函数时会消失?

C语言: 链表查询

两个有序链表序列的交集

两个有序链表序列的合并

PAT-链表-A1032 Sharing