You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++链表插入节点失败,程序可运行但节点位置错误问题求助

链表插入位置错误问题修复

核心错误点

  • insertion函数内局部变量n未初始化,判断pos>n的合法性校验逻辑完全失效,需要先遍历获取链表实际长度再做位置校验。
  • 插入节点的核心代码被错误放在for循环内部,会导致每次指针移动时重复执行插入操作,正确逻辑是先遍历到pos-1对应的节点,循环结束后再执行一次插入操作即可。
  • create函数内部重复接收用户输入的n,覆盖了main函数传入的数组长度,会导致链表创建长度和输入的数组长度不匹配,容易触发数组越界。
  • display函数输出节点值时没有添加分隔符,所有值会连续打印,无法直观判断插入结果是否正确。
  • (优化项)标准C++不支持可变长度数组int a[n]的写法,建议改用动态内存分配或vector容器存储输入的数组值。

修正后完整代码

#include<iostream>
using namespace std;

struct Node
{
    int data;
    struct Node *next;
}*HEAD=NULL;

// 获取链表长度
int getLength(struct Node *p) {
    int len = 0;
    while(p != NULL) {
        len++;
        p = p->next;
    }
    return len;
}

void create(int a[],int n)
{
    struct Node *p;
    for(int i=0;i<n;i++)
    {
        if(i==0)
        {
            HEAD=new Node;
            p=HEAD;
            p->data=a[0];
        }
        else
        {
            p->next=new Node;
            p=p->next;
            p->data=a[i];
        }
        p->next=NULL;
    }
}   
void insertion(struct Node *p,int pos,int x)
{
    struct Node *t;
    int i;
    int len = getLength(p);
    if(pos<0||pos>len) {
        cout<<"Invalid position "<<endl;
        return;
    }
    t=new Node;
    t->data=x;
    if(pos==0)
    {
        t->next=HEAD;
        HEAD=t;
    }
    else {
        for(i=0;i<pos-1;i++)
        {
            p=p->next;
        }
        t->next=p->next;
        p->next=t;
    }
}
void display(struct Node *HEAD)
{   
    struct Node *p;
    p=HEAD;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
int main()
{
    int n;
    cout<<"enter the value of n "<<endl;
    cin>>n;
    int *a = new int[n];
    cout<<"Array elements are "<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    create(a,n);
    insertion(HEAD,1,15);
    display(HEAD);
    delete[] a;
    return 0;
}

内容的提问来源于stack exchange,提问作者Rohan Shahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:05