我已经为循环链表实现了代码,但除以下内容外,输出窗口上未显示任何输出:
打印列表的时间
这是我的编译器给出的消息:
--------------构建:在Circular_Linked_List中进行调试(编译器:GNU GCC编译器)---------------
目标是最新的。 无需执行任何操作(所有项目都是最新的)。
--------------运行:在Circular_Linked_List中进行调试(编译器:GNU GCC编译器)---------------
检查是否存在:C:\ Users \ hp \ Desktop \ CPP编程\ Circular_Linked_List \ bin \ Debug \ Circular_Linked_List.exe 执行中:“ C:\ Program Files(x86)\ CodeBlocks / cb_console_runner.exe”“ C:\ Users \ hp \ Desktop \ CPP Programming \ Circular_Linked_List \ bin \ Debug \ Circular_Linked_List.exe”(在C:\ Users \ hp \桌面\ CPP编程\ Circular_Linked_List。)
这是我正在尝试在以下代码上运行并构建的以下代码:: blocks17.12
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
class Node
{
public:
int data;
Node *next;
};
void push(Node* head,int data)
{
Node *new_node = new Node();
Node *temp = head;
new_node->data = data;
new_node->next = head;
if(head!=NULL)
{
while(temp->next!=head)
{
temp = temp->next;
}
temp->next = new_node;
}
else{
new_node->next = new_node;
}
head = new_node;
}
void printList(Node* head)
{
Node *temp = head;
if(head!=NULL){
while(temp->next!=head)
{
cout<<temp->data<<" ";
temp=temp->next;
}
}
else{
return;
}
}
int main()
{
Node *head = NULL;
push(head,12);
push(head,14);
push(head,15);
push(head,16);
cout<<"Time to print the List\n";
printList(head);
return 0;
}
答案 0 :(得分:1)
您需要按以下方式更改推送功能和打印列表功能:
void push (Node * &head, int data)
{
Node *new_node = new Node ();
Node *temp = head;
new_node->data = data;
new_node->next = head;
if (head != NULL)
{
while (temp->next != head)
{
temp = temp->next;
}
temp->next = new_node;
}
else
new_node->next = new_node;
head = new_node;
}
void printList (Node * head)
{
Node *temp = head;
if (head != NULL)
{
while (temp->next != head)
{
cout << temp->data << " " << std::endl;
temp = temp->next;
}
cout << temp->data << " " << std::endl;
}
else
return;
}
由于在push函数中您正在修改指针本身,并且指针按值传递,因此一旦函数返回,它将保持不变。要在函数内部更改指针,您需要通过引用传递它。 您可以找到有关通过引用here和here
传递指针的有用信息。在printlist函数中,也不会打印temp-> next!= head为true的节点。因此,您需要单独打印。