注册 登录
编程论坛 数据结构与算法

请问大家单链表按结点的前插操作,带头结点的,传入头结点的方法,这个代码哪里错了?

Gloria_zhang 发布于 2022-01-16 11:19, 1811 次点击
程序代码:
bool InsertPriorNodeTwo(LinkList &L,LNode *p,ElemType x){
    if(p==NULL) return false;
    LNode *s=(LNode *)malloc(sizeof(LNode));
    if(s==NULL) return false;
    s=L->next;
    while(s!=NULL)
        if(s!=(p-1)) s=s->next;
    LNode *q=(LNode *)malloc(sizeof(LNode));
    q=p-1;
    s->data=x;
    s->next=q->next;
    q->next=s;
    return true;


求大神指教,本人新手小白
2 回复
#2
Gloria_zhang2022-01-16 11:21
我的思路就是传入头结点然后遍历找到p结点前面的一个结点。然后将s插到p前面一个结点的后面。实现p结点前插操作,但是代码我不太会写,求大神指教。
#3
diycai2022-01-18 11:04
程序代码:
bool InsertPriorNodeTwo(LinkList &L,LNode *p,ElemType x){
    if(p==NULL) return false;
    LNode *s=(LNode *)malloc(sizeof(LNode));//申请待插入结构体空间
    if(s==NULL) return false;
    s=L->next;//申请的空间被你遗弃了,再没有指针指向你申请的空间了
    while(s!=NULL)
        if(s!=(p-1)) s=s->next;//p-1又是什么谜之操作,难道你的链表结构是数组形式的吗
    LNode *q=(LNode *)malloc(sizeof(LNode));
    q=p-1;//q又白白申请了被遗弃的空间
    s->data=x;//s应该是一个空指针,你给他赋值。。。
    s->next=q->next;//回炉重学吧,把指针的章节掌握了再来写链表的代码
    q->next=s;
    return true;
1