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

时间:2016-02-28 23:31:57

标签: c++ insert linked-list

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

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

我的测试代码的输出是;

after insert into empty list: should be 34
34  
after insert at beginning: should be  45, 34
45  34  
after inserts in middle: should be 45, 72, 56, 34
45  34  56  72  
after insert at end: should be 45, 72, 56, 34, 67
45  34  56  72  67  

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

1 个答案:

答案 0 :(得分:0)

我猜你的问题是一个家庭作业问题。我将使用家庭作业回答指南回答:

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

你的while循环取决于两件事。

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

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

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

要确保while循环和以下if-elseif-else语句正确,请考虑它们在

的所有组合中是否正确
  • 链接列表的长度,用于设置prev / curr
  • 的值
  • 位置参数值

链表的长度可以是0,1,...... position参数值可以是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语句针对链表长度和位置参数值的所有组合运行。设计代码时,请确保代码适用于所有组合。