有人能帮我理解我做错了什么。我需要在链接列表中插入一个字符。
它需要像人的名字一样输入,而不是反转它。 然后它告诉用户选择一个位置来添加一个角色。
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(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(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;
}
答案 0 :(得分:2)
d->x=x;
覆盖以前的任何角色。你期望发生什么?
0!=d
可简化为d
,无需与0
进行比较。
使用大括号也可能有帮助。我知道能够用这样的一行来忽略它们很好,但有一天它会最终回来咬你。
至于您的更新,由于以下原因,您总是会遇到段错:
Node* d2=0;
d2->next=d->next;
d2->x=x;
您正在创建Node*
并且从不为其分配任何内容,也没有分配内存。您正在取消引用未初始化的指针。
你确定你没有尝试这样做吗?
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.
}
}
答案 1 :(得分:1)
目前,最终if语句的主体只是覆盖当前节点的x值。为了将新节点粘贴到链表中,您需要。 1.创建一个新节点 2.在列表中选择新节点的位置(您已经这样做了) 3.将前一个节点指向节点 4.将节点指向下一个节点
完成所有这些工作有一些细微差别,但希望这足以开始。