还有没有更简洁的代码实现单链表反转了?

这个题目在面试中曾经也做过了不下5次了吧,第一次写出如下的代码大概是在2010时一次某知名外企的面试中。知名外企很看重写代码的习惯,精益求精也达到了比较苛刻的地步,所以面试官对我这个代码还是比较满意吧!这个算法很简单,说起来大家算法大致思想都一样,但是各自实现起来却都五花八门的!就我现在能搜到的实现中不少while循环前啊后啊的都有很多比较判断什么的!

 

希望有人能指出下面代码可能存在的错误。

更希望有人提出更简洁的代码实现。

 1 template<typename T>
 2 struct Node
 3 {
 4     T e;
 5     Node<T>* pNext;
 6 };
 7 
 8 template<typename T>
 9 Node<T>* ReverseSList(Node<T>* pHead)
10 {
11     Node<T>* pNewHead = NULL;
12     while (pHead)
13     {
14         Node<T>* pNext = pHead->pNext;
15         pHead->pNext = pNewHead;
16         pNewHead = pHead;
17         pHead = pNext;
18     }
19     return pNewHead;
20 }
21 
22 void test()
23 {
24     Node<int> * phead = NULL;
25     ReverseSList<int>(phead);
26 }

 

posted @ 2014-12-07 13:29  Lion_0  阅读(92)  评论(0)    收藏  举报