Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;单链表中的插入节点_C++ - Fatal编程技术网

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++的数据结构课程。我是业余的。不是业余的。学生。确保你把这些问题贴在家庭作业上。从长远来看,你得到的提示将远比直接回答更有价值。