链表算法问题恶心

答案如下:

第一,破坏原链表是什么意思?理论上,这并没有改变原来链表的特性,只是少了一些节点。

第二,删除重复节点L时,其前任节点的下一个并不指向被删除节点的下一个,这样你就会打破链表。不能形成链表。所以这样做是不对的。

第三,。void del same node(linklist * &;l)为什么要在l前面加&呢?,这个问题“&”没必要补充了。

下面是调试好的代码:

# include & ltwindows.h & gt

# include & ltstring.h & gt

# include & ltmalloc.h & gt

# include & ltstdio.h & gt

结构链表

{

int x;

结构链表* next

};

int flag = 0;//定义一个标志,并将其声明为全局变量。至于是否存在相同的号码

结构链表*q,* h;//q作为移动指针,h作为返回的头指针。

int in(int x,struct linklist *l)

{

结构链表*p,* t;

p = l;

而(p!= NULL & amp& ampp->;x!=x)

{

p = p-& gt;接下来;

}

if (p==NULL)

{

返回0;

}

其他

{

返回1;

}

}

结构链表*del(结构链表*l)

{

结构链表* p;

if(l = = NULL | | l-& gt;next==NULL)

{

返回h;

}

如果(在(l-& gt;x,l-& gt;下一个))

{

p = l;

If (flag) //如果前面有一个数,后面没有相同数的数,

那么要删除的这个号码的前一个号码的指针指向它的后一个号码。

{

q->;next = p-& gt;接下来;

l = l-& gt;接下来;

}

Else //如果这样的数字不存在,将L下移。

{

l = l-& gt;接下来;

}

免费(p);

del(l);

}

其他

{

++标志;

If (flag==1) //一旦一个数后面不存在,H就指向这个数。

//和h作为头指针,只有一次。

{

h = l;

}

q = l;//q仍然指向L进行下一次指针移动。

del(l-& gt;下一个);

}

}

int main()

{

结构链表*l,*p,* t;

int I;

t = p = l =(struct linklist *)malloc(sizeof(struct linklist));

for(I = 0;我& lt6;i++)

{

如果(i==0)

{

scanf("%d ",& amp(t->;x));

}

其他

{

t =(struct linklist *)malloc(sizeof(struct linklist));

scanf("%d ",& amp(t->;x));

p->;next = t;

p = t;

}

}

p->;next = NULL

l = del(l);

而(l!=空)

{

printf("%d ",l-& gt;x);

l = l-& gt;接下来;

}

系统(“暂停”);

}

我进行了三种可能的输入测试,没有问题:

第一种:1 2 3 4 5 6,输出还是1 2 3 4 5 6。

第二种:3 0 3 1 0 3,输出为1 0 3。

第三种:1 2 3 4 6 4,输出为1 2 3 6 4。

如果你有任何其他问题,打电话给我!