简体   繁体   中英

c++ insertion node in single linked list

Can someone help me understand what I'm doing wrong. I need to insert a character into a linked list.

It takes an input like a name of person, than it reverses it. then it tells user to choose a position to add a character.

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;

However, this code changes the character, not adds it.

UPDATE:

I can't still figure it out.

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;
}

I am getting a segmentation error.

Ok, so i figured out, what i really wanted. Thanks for help

  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;
}
d->x=x;

Is overwriting whatever character was there previously. What do you expect to happen?

0!=d

Can be simplified to just d , no need to compare to 0 .

It might also be helpful is you use braces. I know it's nice to be able to ignore them with one lines like this, but it will eventually come back to bite you one day.

As for your update , you're always going to get a segfault because of these lines:

Node* d2=0;
d2->next=d->next;
d2->x=x;

You're creating a Node* and never assigning anything to it, nor allocating memory. You're dereferencing an uninitialized pointer.

Are you sure you're not trying to do this?

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.
    }
  } 

Presently the body of your final if statement is simply overwriting the x value of current node. In order to stick a new node into a linked list, you need to. 1. Create a new node 2. Choose a location for the new node in the list (you've already done that) 3. Point the preceding node at your node 4. Point your node at the next node

There are some nuances to accomplishing all of that, but hopefully that's enough to get started.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM