编辑问题以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。这将有助于其他人回答这个问题。
我试图在C上创建一个单链表。我用3个函数来创建一个基于“DiseaseList”结构的项目,将该项目添加到列表中,然后打印出来。
我已经花了几个小时梳理这些代码,我似乎无法阻止它将这个列表的开头定位到最后一项。只有两点可以改变头部(其中head=*),但这肯定是对我所写内容的误解,因为我无法理解。
例如,我添加了两个新元素“1”
#include <iostream>
using namespace std;
typedef struct DiseaseList
{
int a;
struct DiseaseList *Next;
}DList; //Not sure if I needed DList here or should have just used DiseaseList
DList* CreateElement();
void printList(DList*);
DList* AddElement(DList*, DList*);
int main(void)
{
int choose;
DList *Head = NULL, *NewElement;
do {
cout << "1. Add element" << endl;
cout << "2. Print list" << endl;
cout << "3. Exit" << endl;
cin >> choose;
switch (choose)
{
case 1:
NewElement = CreateElement();
Head = AddElement(Head, NewElement);
break;
case 2: printList(Head); break;
case 3: return 0;
}
} while (1);
}
DList* CreateElement() //Creates a new item for the list
{
DList* temp;
cout << "New Number:";
cin >> temp->a;
temp->Next = NULL;
return temp;
}
DList* AddElement(DList *Head, DList *NewElement) //Adds new item from CreateElement to the list
{
if (Head == NULL)
{
NewElement->Next = NULL;
Head = NewElement;
}
else{
DList *temp = Head;
while (temp->Next != NULL)
{
temp = temp->Next;
}
temp->Next = NewElement;
}
return Head;
}
void printList(DList* Head)
{
while (Head != NULL)
{
cout << Head->a << endl;
Head = Head->Next;
}
}
只需要小修复(也清理了空白):
#include <iostream>
using namespace std;
typedef struct DList_
{
int a;
struct DList_ *Next;
}DList;
DList* CreateElement();
void printList(DList*);
DList* AddElement(DList*, DList*);
int main(void)
{
int choose;
DList *Head = NULL, *NewElement;
do {
cout << "1. Add element" << endl;
cout << "2. Print list" << endl;
cout << "3. Exit" << endl;
cin >> choose;
switch (choose)
{
case 1:
NewElement = CreateElement();
Head = AddElement(Head, NewElement);
break;
case 2: printList(Head); break;
case 3: return 0;
}
} while (1);
return 0;
}
DList* CreateElement() //Creates a new item for the list
{
DList* temp = new DList;
cout << "New Number:";
cin >> temp->a;
temp->Next = NULL;
return temp;
}
DList* AddElement(DList *Head, DList *NewElement) //Adds new item from CreateElement to the list
{
if(Head == NULL)
return NewElement;
DList *temp = Head;
while (temp->Next != NULL)
temp = temp->Next;
temp->Next = NewElement;
return Head;
}
void printList(DList* Head)
{
while (Head != NULL)
{
cout << Head->a << endl;
Head = Head->Next;
}
}
除了@TheDark的答案之外,您应该注意,除非您分配 AddElement()
的返回值,否则 Head
参数永远不会在 main(
) 中更改,因为您是按值传递指针:
DList* AddElement(DList *Head, DList *NewElement) {
最好通过引用传递<code>Head</code>指针,使其正确初始化
void AddElement(DList*& Head, DList *NewElement) {
// ^ Note the &
// ...
}
CreateElement
实际上并没有创建元素!
这意味着它返回(并使用)一个未初始化的指针,我很惊讶你的编译器没有显示警告。
替换此行:
DList* temp;
跟
DList* temp = new Dlist;
在单链表中,我们知道最后一个节点的下一个指向,这样我们就可以通过遍历找到它。 如果单链表的最后一个节点指向某个中间节点,那么我们如何找到最后一个节点?
我在课堂上创建了两个列表。 其中一个称为预算,包含元素section、month和sum,返回以下内容: [Budzet{sec='AGD/RTV',月='01',和=96},Budzet{sec='AGD/RTV',月='03',和=30},Budzet{sec='食品',月='04',和=23},Budzet{sec='游戏',月='09',和=1084}...] 这是SQL查询 第二个是元素
我目前正在为Java中的循环链表工作。我们应该能够在列表的前面插入和后面插入。但是,我已经让这些方法在循环链表类中正常工作。 我得到的结果是 对于第二次插入,这里的next指向null应该指向列表的头部。 节点类 循环链表类 主班
问题内容: 我正在练习使用链表节点,遇到了一个我不知道如何回答的问题。如何删除链接列表中的最后一个节点。下面的代码适用于所有条目的最后一个节点。最后一个不会被删除。 节点类别 主要 问题答案: 我想您的最后一个元素失败了。最后一个元素将没有元素。因此,不会将最后一个元素与传递的字符串进行比较。您应该使用调试器进行跟踪。
给定单链表的最后一个节点,我们如何找到头节点? 假设给定JSON: {“id”:“A”,“next”:“B”},{“id”:“B”,“next”:“C”}{“id”:“C”,“next”:“D”}{“id”:“D”,“next”:“null} 现在假设上面没有排序,我们需要算出HEAD元素“A”。
我有一个奇怪的场景,每次我从的第一项中的微调器中选择一个值,最后一个项的微调器值与第一项相同。只有当ListView项目总数为5个及以上时,才会发生这种情况。我注释掉了代码,只保留了声明,但它仍在发生。这是Android系统的漏洞吗? 澄清: > 我的ListView的为空 我的微调器的被注释掉。 Android SDK工具版本为22.6.2 Android SDK平台工具是19.0.1 以下是适