huihut / interview

📚 C/C++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary of the basic knowledge of recruiting job seekers and beginners in the direction of C/C++ technology, including language, program library, data structure, algorithm, system, network, link loading library, interview experience, recruitment, recommendation, etc.
https://interview.huihut.com
Other
34.8k stars 7.97k forks source link

链表的代码好像错了 #34

Closed a74731248 closed 5 years ago

a74731248 commented 5 years ago

在数据结构的链式结构里的linklist with head中,enqueue_Lq函数里,当L==null和当l->next ==null的逻辑是不是错了

Sent from PPHub For GitHub

huihut commented 5 years ago

没错吧,EnQueue_LQ 是分三种情况:L为空、L只有一个头结点,L头结点后还有其他结点,分别处理。

请问哪里有问题呢?

a74731248 commented 5 years ago

79行当L为空时将q赋给L->next,第81行当L只有一个头结点时将q赋给L;我觉得这里是不是应该反过了了呀,还是说我理解错了

huihut commented 5 years ago

噢噢,只有一个头结点的时候错了,应该是

else if (NULL == L->next) L -> next = q;

L为空的时候,创建一个头结点,然后就和只有一个头结点一样处理(L -> next = q),这个应该没问题。

谢谢了,还有什么地方有问题吗?

a74731248 commented 5 years ago

为什么当L==NULL时不让L=q呢?如果是按照现在的代码,L->next=q的话,当L==NULL时,L的data是空的对吗

huihut commented 5 years ago

因为如果当L==NULL时让L=q,这就没有头结点了,为了保证链表有头结点,必须创建个data为空的头结点(L = (LNode *)malloc(sizeof(LNode))),然后其next指向第一个结点(L -> next = q

a74731248 commented 5 years ago

噢好的,谢谢啦

huihut commented 5 years ago

也感谢指出,关闭了。