c语言将一个已知头结点的单链表逆序_C语言单链表逆向(逆置)

本文介绍了如何使用C语言将一个已知头结点的单链表进行逆序操作。通过提供的源代码,展示了针对不同节点数量的处理方式,强调了处理链表边界条件的重要性,并反思了在面试中遇到类似问题时的心理素质和冷静思考能力的培养。
摘要由CSDN通过智能技术生成

<1>   最近参加了一次面试,让编写一个单链表操作,包括创建,删除,逆向什么的.其它的操作,这里就不写了这里把要求逆向的操作贴出来,供大家参考,同时也希望能提出意见。

<2>源程序

int converse(list *list)

{

list *tmp1,*tmp2,*tmp3;

tmp1=list;

if(tmp1->next!=null)//链表多于一个结点

{

tmp2=tmp1->next;//

if(tmp2->next!=null) //有至少三个有效节点

{ tmp3=tmp2->next;      //其实每个程序都应该仔细处理“接口”或者说是“边界”的问题

tmp1->next=null;//主要设置第一个节点的next为空

tmp2->next=tmp1;

tmp1=tmp3; //tmp1和tmp2的next已经正确设置,但tmp3和tmp2还没有建立连接

}

else//有两个有效节点

{

tmp1->next=null;//主要设置第一个节点的next为空

tmp2->next=tmp1;

list->next=tmp2;

return 0;

}

}

else//链表只有一个结点即头结点,为空链表,

{

return -1;

}

while(tmp1->next!=null)//当前tmp1和tmp3指向同一位置,tmp2为已逆序的链表最前端

{

tmp3=tmp1->next;//tmp3移到下一个有效节点

tmp1->next=tmp2;//建立tmp1和tmp2之间的逆向关系

tmp2=tmp1;      //tmp2再次指向已逆序链表的最前端

tmp1=tmp3;      //tmp1和tmp3再次指向待逆序的节点

}

//当前tmp1和tmp3是链表的最后一个效节点

tmp1->next=tmp2;   //正确建立tmp1和当前已逆序链表的最前端 tmp2的关系

list->next=tmp1;   //建立头结点与tmp1的关系

return 0;

}

<3>其实我笔试实际写的并不是这样,只不过后来才想起来的,当时也是太浮噪了。所以总结一下这也是一个人的能力不足的体现,遇事不能冷静思考,没有良好的心理素质。以后应该好好培养自己这方面的能力。

阅读(3707) | 评论(0) | 转发(0) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值