单链表逆序

  最近经常碰到让写链表逆序的命题,但是我总是粗心大意漏掉内容,造成结果是痛苦和迷茫:

 1 void SWapNow(Node* p)
 2 {
 3     Node* pCur = p->pNext;
 4     p->pNext = NULL;
 5     Node* pTemp = NULL;
 6     Node* pPre = NULL;
 7     while (NULL != pCur)
 8     {
 9         pPre = p->pNext;
10         p->pNext = pCur;
11         pTemp = pCur->pNext;
12         pCur->pNext = pPre;
13         pCur = pTemp;
14     }
15 }

  如上代码,为头插法,第4行内容没有的话,链表在第一节点陷入死循环,造成空间不足的bug;

  如上代码主要是先保存头部连接的下一节点,置换为当前节点,保存当前节点的下一节点,置换为头部节点的前下一节点。之后利用保存的当前节点的下一节点进行循环置换。

  挺简单的,但是当时怎么也理不清道不明,唉,考菜说的就是我这种人吧!

猜你喜欢

转载自www.cnblogs.com/WaterGood/p/9114160.html