c语言动态链表排序问题

c语言动态链表排序问题如图。将第一个第二个节点交换后,p2.next是否依然对应p3?还是p1.next对应p3?还是都不对应p3?

p2.next是否依然对应p3?还是p1.next对应p3?那么看来你的p1,p2是结构体变量,而不是结构体指针变量;
对于链表排序注意有2种;一种是改变节点的指向;还有一种就是改变结构体成员的内部保存的数据;通常用第一种;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-05-04
如果要交换p1与p2两个结点,要做三步工作:
第一步,head指向p2(如果只做这一步,p1就废了),即head=p2;
第二步,p2指向p1(如果只做前两步,就成了死循环),即p2.next=p1;
第三步,p1指向p3,即p1.next=p3。
只有完成这三步,才达到交换p1、p2的目的。你的问题可从三个步骤中得到答案。追问

如果介入一个临时变量,将p1,p2进行交换呢?

追答

还有一办个笨法,类似一维数组的做法,相对来说只对一个结点只有一个数据的链表还算简单,是把p1结点与p2结点存放的数据进行交换,这个过程当然要借助于一个临时变量。但这个方法对一个结点上存放多于一个数据的链表来说太复杂了,我称之为太笨了,呵呵。

本回答被提问者和网友采纳
第2个回答  2017-05-04
P1和P2交换,就是P2.next=P1,P1.next=P3,head=P2
相似回答