在链接列表的第n个位置插入节点(无法理解我的代码)

时间:2019-01-09 08:12:57

标签: c++

无法理解[else statement]块中的步骤。 请尝试帮助我。我正在尝试在第n个位置插入一个节点,请记住,除非已创建第(n-1)个节点,否则无法创建第n个位置的节点。

编辑:-现在我已经发布了完整的代码(有效),

#include<iostream>
using namespace std;



struct Node{
    int data;
    Node*next ;
};

void insertlinkedlist(Node**head,int data,int position)
{
    int k = 1;

Node *p,*q,*newNode;

    newNode=(Node*)malloc(sizeof(Node));
    if(!newNode)
    {
        cout<<"Memory leak";
        return;
    }

    newNode->data = data;
    p=*head;

    if(position ==1)
    {
        newNode ->next = p;
        *head = newNode;
    }

    else {
        while(p!=NULL&k<position){
            k++;
            q=p;
            p = p->next;
        }
        q->next = newNode;
        newNode ->next = p;
    }
}

void display(Node*head)
{
    Node*ptr =  head;
    while(ptr!=NULL)
    {
        cout<<ptr->data<<" ";
        ptr=ptr->next;
    }
}


int main(){
    Node*head = NULL;
    insertlinkedlist(&head, 34, 1);
     insertlinkedlist(&head, 3, 2);
     insertlinkedlist(&head, 13, 3);

    display(head);

    cout<<endl;


}

输出

  

34 3 13

1 个答案:

答案 0 :(得分:0)

当没有在第一个位置插入元素时,将执行else语句。在用1引用的代码中,我认为用0声明第一个位置将是更好的方法。
当指针有效时,while语句p!=null返回true(= 0)。该值按位与返回值k<position相加。因此,当您位于链表的最后一个元素或指定位置时,while语句会中断。
在执行while语句后,将新Node插入到q的末尾或实际指定位置,该值将在while语句中进行计算。之后,将下一个元素插入newNode之后。想象一下在位置3处有一个新元素。然后,该元素在位置3处,然后在3之后的所有内容都从位置4开始。