在给定位置 c++ 中插入节点

Inserting a node in the given position c++

本文关键字:插入 节点 c++ 位置 定位      更新时间:2023-10-16

>我在单个链表中的给定位置插入元素时遇到问题。实际上问题仅在插入中间部分,这是我的插入功能;

void SimpleList::insert (const ItemType & item, int position){        
    Node* prev = NULL;
    Node* curr = NULL;
    Node* newNode = new Node();
    newNode->data = item;
    int tempPos = 0;
    curr = head;
    if(head != NULL){
        while(curr->next != NULL && tempPos != position)
        {
            prev = curr;
            curr = curr->next;
            tempPos++;
        }
        if(position==1)
        {
            newNode->next=head;
            head=newNode;
            size++;
        }
        else if(curr->next == NULL)
        {
            curr->next = newNode;
            last = newNode;
            newNode->next= NULL;
            size++;
        }
        else
        {
            prev->next = newNode;
            newNode->next = curr;
            size++;
        }
    }
    else  {
        last = head = newNode;
        last->next = NULL;
        size++;
    }
}

我的测试代码的输出是;

插入空列表后:应为 3434 开头插入后:应为 45、3445  34 中间插入后:应为45、72、56、3445  34  56  72 在末尾插入后:应为 45、72、56、34、6745  34  56  72  67 

我该如何解决这个问题?谢谢大家的帮助。

我想你的问题是家庭作业问题。 我将使用家庭作业回答指南来回答:

https://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions

您的 while 循环取决于 2 件事。

  • 链表的长度,用于设置 prev/curr 的值
  • 位置参数值

之后的 if-elseif-else 语句取决于设置 prev/curr 值和位置参数值的 while 循环结果。

你必须确保while循环是正确的,然后,if-elseif-else语句是正确的。

为了确保 while 循环和以下 if-elseif-else 语句是正确的,请考虑它们在所有组合中是否正确

  • 链表的长度,用于设置 prev/curr 的值
  • 位置参数值

链表的长度可以是 0、1、...位置参数值可以是 0、1、...

当 length=1,position=0 时,while 循环不迭代,并且程序执行else if(curr->next == NULL),结果链表的新节点位于原始的第一个节点之后

当 length=1, position=1, while 循环不迭代,并且程序执行if(position==1) ,结果链表的新节点位于原始第一个节点之前

当 length=2,position=0 时,while 循环不迭代,程序执行elseprev=NULL ,因此prev->next会导致分割错误。

当 length=2, position=1 时,while 循环迭代一次,程序执行if(position==1) . 生成的链表具有位于原始第一个节点之前的新节点。

当 length=2, position=2 时,while 循环迭代一次,程序执行else if(curr->next == NULL) . 生成的链表将新节点放在原始第二个节点之后

上述情况显示了 while 循环和以下 if-elseif-else 语句导致链表可能不正确的情况。

为了解决这个问题,请考虑如何设计 while 循环和 if-elseif-else 语句,以便对于链表长度和位置参数值的所有组合,程序将在正确的位置插入新节点。

我不太确定在开头插入、在中间插入和在结尾插入的位置参数值。 在查看我的答案后,您可能需要自己验证链表状态。

while 循环和 if-elseif-else 语句中的代码针对链表长度和位置参数值的所有组合运行。 设计代码时,请确保代码适用于所有组合。