小佘同学 2021-10-03 20:18 采纳率: 0%
浏览 90

链表引用的问题(答案不理解)

题目:1,设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。
答案

void Del_x_3(Linklist &L,ElemType x){//递归实现在单链表中删除值为x的结点
LNode *p;//P指向待删除结点
if(L==NULL)return;//递归出口
if (L->data==x){//若L所指结点的值为×
p=L;//删除*L,并让L指向下一结点
L=L->next;
free(p) ;
Del_x_3 (L,x);//递归调用
)
else Del_x_3(L->next,x);//若工所指结点的值不为x
}

我的疑问
不懂之处在这里,为什么这里能直接L=L->next,这样链表不就断了吗

p=L;//删除*L,并让L指向下一结点
L=L->next;
free(p) ;

答案是这样解释的:有读者认为直接去掉p结点会造成断链,实际上因为工为引用,是直接对原链表进行操作的,因此不会断链。

附上我验证的源程序(确实不会断链)

#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

typedef struct Node{
    int data;
    Node *next;
}Node,*LinkList;

/*
尾插法
*/
void Init(LinkList H,int a[],int n){
    H->next = NULL;
    Node *r = H;//保持在最后
    for(int i = 0;i<n;i++){
        Node *node = (Node *)malloc(sizeof(Node));
        node->data = a[i];
        node->next = NULL;
        r->next = node;
        r = node;
    }
}

void show(LinkList H){
    Node *p = H->next;
    while(p!=NULL){
        printf("%d",p->data);
        p = p->next;
    }
}

//递归
void Del_x_3(LinkList &L,int data){
    Node *node;
    if(L == NULL)return;
    if(L->data == data){
        node = L;
        L=L->next;
        free(node);
        Del_x_3(L,data);
    }
    else{
        Del_x_3(L->next,data);
    }
}

int main(int argc, char** argv) {
    //初始化动作 
    LinkList L;
    int n = 5;
    int a[n];
    printf("初始化列表,请输入5个数据\n");
    for(int i = 0; i<n ;i++){
        scanf("%d",&a[i]);
    }
    Init(L,a,n);
    show(L);
    printf("\n"); 
    Del_x_3(L,1);
    show(L);
    
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 关注

    因为你这里的L是从main函数传过来的,已经有值了
    你之前输入数据然后init 把链表创建好了,所以你再传到这个函数里面可以直接L=L->next
    这样就实现了删除值为x的节点

    评论

报告相同问题?

问题事件

  • 创建了问题 10月3日

悬赏问题

  • ¥15 关于移动机器人坐标计算
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法