这个逆转单向链表的代码应该算是比较高效,容易理解的代码,
刚开始我的思路与网上大多数人一样,想着重新造一个链表,但写起来太麻烦了,且有许多边界问题需要解决,想想就心烦,写了半天没写出来,且这个题目的输入和打印函数是服务器提供,因此不能再在本机上进行测试,对边界条件的把握就更加难了。复杂+没有测试数据,只能自己换个思路解决了。最后在测试的时候,有一个测试点没过——空链表,于是查了下什么叫空链表,哈哈,添加一行代码过了这个测试点。
//具体思路:从原链表开始,以表头为中心向右删除一个节点
//然后把这个节点加在链表的前面,
List Reverse( List L )
{
if (L == NULL) return NULL; //这一步用来应付空链表的情况。
//初始化要操作的节点,q始终在原链表的表头,p随着删除节点向右移动
//t随着左侧新增节点向左移。
List q =L;
List p =L->Next;
List t =L;
while(q->Next)
{
q->Next = p->Next;//删除节点
p->Next = t;//把节点增加到左侧
t = p;//t向左移动一个节点
p = q->Next;//p向右移动一个节点
}
return t;
}