C++ c++;单链表中的插入节点
有人能帮我理解我做错了什么吗。我需要在链表中插入一个字符 它接受像人名这样的输入,然后将其反转。 然后它告诉用户选择一个位置来添加角色C++ c++;单链表中的插入节点,c++,C++,有人能帮我理解我做错了什么吗。我需要在链表中插入一个字符 它接受像人名这样的输入,然后将其反转。 然后它告诉用户选择一个位置来添加角色 void insert_char(Node* plist, char x, int p){ Node* d=plist; for (int i=1; i<p and 0!=d; i++) d=d->next; if (0 !=d) d->x=x; void insert_char(节点*plist,char x,i
void insert_char(Node* plist, char x, int p){
Node* d=plist;
for (int i=1; i<p and 0!=d; i++)
d=d->next;
if (0 !=d)
d->x=x;
void insert_char(节点*plist,char x,int p){
节点*d=plist;
对于(inti=1;inext;
如果(0!=d)
d->x=x;
但是,此代码更改字符,而不是添加字符
更新:
我还是搞不懂
void insert_char(Node* plist, char x, int p){
Node* d=plist;
Node* d2=0;
for (int i=1; i<p and 0!=d; i++)
d2->next=d->next;
d->next=d2;
if (0 !=d)
d2->x=x;
return;
}
void insert_char(节点*plist,char x,int p){
节点*d=plist;
节点*d2=0;
对于(inti=1;inext=d->next;
d->next=d2;
如果(0!=d)
d2->x=x;
返回;
}
我得到一个分割错误
好的,我想起来了,我真正想要的是什么。谢谢你的帮助
void insert_char(Node* plist, char x, int p){
Node* d=plist;
Node* d2= new Node();
for (int i=1; i<p and d; i++)
d2->next=d->next;
d->next=d2;
if (0 !=d)
d2->x=x;
return;
}
void insert_char(节点*plist,char x,int p){
节点*d=plist;
Node*d2=新节点();
对于(int i=1;inext=d->next;
d->next=d2;
如果(0!=d)
d2->x=x;
返回;
}
目前,最终if语句的主体只是覆盖当前节点的x值。为了将新节点粘贴到链接列表中,您需要。
1.创建一个新节点
2.在列表中为新节点选择一个位置(您已经这样做了)
3.将前面的节点指向您的节点
4.将节点指向下一个节点
完成这一切有一些细微差别,但希望这足以让我们开始
d->x=x;
正在覆盖以前存在的任何字符。您预计会发生什么情况
0!=d
可以简化为d
,无需与0
进行比较
你使用牙套也可能会有帮助。我知道用这样的一句话忽略它们是很好的,但总有一天它会回来咬你
至于您的更新,由于以下几行,您总是会遇到SEGFULT:
Node* d2=0;
d2->next=d->next;
d2->x=x;
您正在创建一个节点*
,但从未向其分配任何内容,也未分配内存。您正在取消对未初始化指针的引用
你确定你不是想这么做吗
void insert_char(Node* plist, char x, int p){
Node* d=plist;
for (int i=1; i<p && d; i++)
d=d->next;
if (!d) // If this node is empty..
{
d = new Node; // Store a new node at the position.
d->x = x; // Set the char value for the new node.
}
else // If this node is not empty..
{
Node* next = d->next(); // Get the next node.
d = new Node; // Create a new node and insert.
d->x = x; // Set the char for this node.
if(next) // If there was a mode above our insertion..
{
newNode->next = next; // Store it in the next member of our new node.
}
}
void insert_char(节点*plist,char x,int p){
节点*d=plist;
对于(int i=1;inext;
if(!d)//如果此节点为空。。
{
d=新节点;//在该位置存储一个新节点。
d->x=x;//设置新节点的字符值。
}
else//如果此节点不为空。。
{
Node*next=d->next();//获取下一个节点。
d=新节点;//创建新节点并插入。
d->x=x;//设置此节点的字符。
if(next)//如果在我们的插入上面有一个模式。。
{
newNode->next=next;//将其存储在新节点的下一个成员中。
}
}
那么我该怎么办?新节点应该是我正在插入的字符或什么?@MW-好的,我假设每个节点都有一个字符,而您正试图在列表中插入一个新节点?请查看我的更改,并告诉我您是否正试图这样做。新节点->x=x;未在列表中声明scope@MW-哦,对不起,我想我想了一个怎样做的方法。我离线了一段时间。我很高兴看到唯美主义者能够帮助你。你现在正在学习数据结构课程吗?是的,它就像一个C++的数据结构课程。我是业余的。不是业余的。学生。确保你把这些问题贴在家庭作业上。从长远来看,你得到的提示将远比直接回答更有价值。