关淳 2022-10-09 10:13 采纳率: 73.9%
浏览 25
已结题

为什么第一份代码行而第二份代码却不行,研究了很,单纯改变了一个命名方式

A.B.C 为递增有序链表,删去A中即在B出现也在C出现的元素。

第一份代码:
#include <bits/stdc++.h>
using namespace std;

typedef int LLDataType;

typedef struct LinkList {
LLDataType data;
struct LinkList* next;
}*Link;

void CreateLinkList (Link &head, int n)
{
head = (Link)malloc(sizeof(LinkList));
head->next = NULL;
Link tail = head;
while (n--)
{
Link a = (Link)malloc(sizeof(LinkList));
a->next = NULL;
scanf("%d", &a->data);
tail->next = a;
tail = a;
}
return;
}

void IntersectionDelete (Link &L, Link L2, Link L3)
{
while (L2 && L3)
{
if (L2->data == L3->data)
{
Link temp = L;
while (temp->next)
{
if (temp->next->data == L2->data)
{
Link del = temp->next;
temp->next = temp->next->next;
free (del);
}
else temp = temp->next;
}
L2 = L2->next;
L3 = L3->next;
}
else if (L2->data < L3->data)
L2 = L2->next;
else
L3 = L3->next;
}
return;
}

void LinkListPrint (Link L)
{
Link L1 = L->next;
while (L1)
{
printf ("%d ", L1->data);
L1 = L1->next;
}
puts ("");
}

int main ()
{
Link La, Lb, Lc;
int na, nb, nc;

cout << "请输入表A的长度\n";
cin >> na;
cout << "请输入表A\n";
CreateLinkList (La, na);

cout << "请输入表B的长度\n";
cin >> nb;
cout << "请输入表B\n";
CreateLinkList (Lb, nb);

cout << "请输入表C的长度\n";
cin >> nc;
cout << "请输入表C\n";
CreateLinkList (Lc, nc);

IntersectionDelete (La, Lb, Lc);
cout << "删除Lb和Lc交集元素的La为\n";
LinkListPrint (La);

return 0;
}

第二份代码:
#include <bits/stdc++.h>
using namespace std;

typedef int LLDataType;

typedef struct LinkList {
LLDataType data;
struct LinkList* next;
}Link;

void CreateLinkList (Link* &head, int n)
{
head = (Link*)malloc(sizeof(Link));
head->next = NULL;
Link* tail = head;
while (n--)
{
Link* a = (Link*)malloc(sizeof(Link));
a->next = NULL;
scanf("%d", &a->data);
tail->next = a;
tail = a;
}
return;
}

void IntersectionDelete (Link* &L, Link* L2, Link* L3)
{
L2 = L2->next;
L3 = L3->next;
while (L2 && L3)
{
if (L2->data == L3->data)
{
Link* L1 = L;
while (L1)
{
if (L1->next->data == L2->data)
{
Link* del = L1->next;
L1->next = L1->next->next;
free (del);
}
else
L1 = L1->next;
}
L2 = L2->next;
L3 = L3->next;
}
if (L2->data < L3->data)
L2 = L2->next;
if (L3->data < L2->data)
L3 = L3->next;
}
return;
}

void LinkListPrint (Link* L)
{
Link* L1 = L->next;
while (L1)
{
printf ("%d ", L1->data);
L1 = L1->next;
}
puts ("");
}

int main ()
{
Link *La, *Lb, *Lc;
int na, nb, nc;

cout << "请输入表A的长度\n";
cin >> na;
cout << "请输入表A\n";
CreateLinkList (La, na);

cout << "请输入表B的长度\n";
cin >> nb;
cout << "请输入表B\n";
CreateLinkList (Lb, nb);

cout << "请输入表C的长度\n";
cin >> nc;
cout << "请输入表C\n";
CreateLinkList (Lc, nc);

IntersectionDelete (La, Lb, Lc);
cout << "删除Lb和Lc交集元素的La为\n";
LinkListPrint (La);

return 0;
}

  • 写回答

1条回答 默认 最新

  • 於黾 2022-10-09 10:27
    关注

    你这是在折腾啥呢,你要修改链表,那要传递链表的指针呀,你把链表一个节点的值传进来有啥用?
    Link* L1 = L
    这个代码就有问题
    L到底是个啥,是指针还是值,如果是值,那你的L1指向的是一个拷贝,最初的指针地址已经丢了
    如果L是指针,那你的L1是个二级指针,总之这逻辑非常别扭

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月13日
  • 已采纳回答 10月13日
  • 修改了问题 10月9日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?