为什么打印时我的输出不显示包含 14 的节点?
Why is my output not showing the node containing 14 when I print?
为什么我的输出在打印时不显示包含 14
的节点?[=12=]
我想我在实现链表时遗漏了一些关键原则:
#include<iostream>
using namespace std;
struct ListNode
{
int value;
ListNode *next;
ListNode(int d,ListNode* p=NULL) //constructor
{
value=d;
next=p;
}
};
int main()
{
ListNode* header=NULL;
header=new ListNode(5);
ListNode* ptr=header; //pointer to find the correct position
ListNode* sptr=new ListNode(13);
header->next=sptr;
ListNode* tptr=new ListNode(19);
sptr->next=tptr;
ListNode* t=new ListNode(14);
while((ptr->value) < (t->value))
{
ptr=ptr->next;
}
ListNode* g=ptr;
ptr=t;
t->next=g;
while(header!=NULL)
{
cout<<header->value<<" ";
header=header->next;
}
return 0;
}
您没有将值为 14 的节点添加到列表中。即列表中的节点均未指向在此声明中创建的节点
ListNode* t=new ListNode(14);
你唯一做的就是将节点的下一个数据成员设置为值为 19 的节点的地址。
ListNode* g=ptr;
ptr=t;
t->next=g;
声明在这里
ptr=t;
没有效果。
如果在这个循环之后
while(header!=NULL)
{
cout<<header->value<<" ";
header=header->next;
}
您将把这段代码放入您的程序中
cout << '\n';
while ( ptr != NULL )
{
cout<<ptr->value<<" ";
ptr=ptr->next;
}
您将得到程序输出为
5 13 19
14 19
说清楚再注意这个循环之后
while((ptr->value) < (t->value))
{
ptr=ptr->next;
}
指针ptr
指向值为19的节点。并且不能使用指针在该节点之前插入值为14的新节点,因为你有一个单链表和值为 19 的节点只有一个指向下一个节点的引用。
因此只能在值为19的节点之后使用while循环后得到的指针ptr
插入值为14的新节点。
如果要在值为 19 的节点之前插入值为 14 的新节点,则不要使用此代码片段
while((ptr->value) < (t->value))
{
ptr=ptr->next;
}
ListNode* g=ptr;
ptr=t;
t->next=g;
你应该像下面这样写
ListNode *prev = nullptr;
while( ptr != nullptr && ptr->value < t->value )
{
prev = ptr;
ptr=ptr->next;
}
t->next = ptr;
prev == nullptr ? header = t : prev->next = t;
为什么我的输出在打印时不显示包含 14
的节点?[=12=]
我想我在实现链表时遗漏了一些关键原则:
#include<iostream>
using namespace std;
struct ListNode
{
int value;
ListNode *next;
ListNode(int d,ListNode* p=NULL) //constructor
{
value=d;
next=p;
}
};
int main()
{
ListNode* header=NULL;
header=new ListNode(5);
ListNode* ptr=header; //pointer to find the correct position
ListNode* sptr=new ListNode(13);
header->next=sptr;
ListNode* tptr=new ListNode(19);
sptr->next=tptr;
ListNode* t=new ListNode(14);
while((ptr->value) < (t->value))
{
ptr=ptr->next;
}
ListNode* g=ptr;
ptr=t;
t->next=g;
while(header!=NULL)
{
cout<<header->value<<" ";
header=header->next;
}
return 0;
}
您没有将值为 14 的节点添加到列表中。即列表中的节点均未指向在此声明中创建的节点
ListNode* t=new ListNode(14);
你唯一做的就是将节点的下一个数据成员设置为值为 19 的节点的地址。
ListNode* g=ptr;
ptr=t;
t->next=g;
声明在这里
ptr=t;
没有效果。
如果在这个循环之后
while(header!=NULL)
{
cout<<header->value<<" ";
header=header->next;
}
您将把这段代码放入您的程序中
cout << '\n';
while ( ptr != NULL )
{
cout<<ptr->value<<" ";
ptr=ptr->next;
}
您将得到程序输出为
5 13 19
14 19
说清楚再注意这个循环之后
while((ptr->value) < (t->value))
{
ptr=ptr->next;
}
指针ptr
指向值为19的节点。并且不能使用指针在该节点之前插入值为14的新节点,因为你有一个单链表和值为 19 的节点只有一个指向下一个节点的引用。
因此只能在值为19的节点之后使用while循环后得到的指针ptr
插入值为14的新节点。
如果要在值为 19 的节点之前插入值为 14 的新节点,则不要使用此代码片段
while((ptr->value) < (t->value))
{
ptr=ptr->next;
}
ListNode* g=ptr;
ptr=t;
t->next=g;
你应该像下面这样写
ListNode *prev = nullptr;
while( ptr != nullptr && ptr->value < t->value )
{
prev = ptr;
ptr=ptr->next;
}
t->next = ptr;
prev == nullptr ? header = t : prev->next = t;