这是一道基本题 时隔一段时间后都值得练习一下
Reverse a singly linked list.
基本思路:设置三个指针,一个为遍历前驱pre(游标一 先前指针) ,一个为当前指针cur(游标二 当前指针),另一个作为保存后继节点(后继指针),保存下一个逆置后指向的位置。
代码如下:
ListNode* ListReverse(ListNode* L)
{
if ((NULL == L) || (NULL == L->next))return L; //边界检测
ListNode* pPre = L; //先前指针
ListNode* pCur = pPre->next; //当前指针
ListNode* pNext = NULL; //后继指针
while (pCur != NULL)
{
pNext = pCur->next;//有个规律 逆置操作 赋值完的变量下一句会被赋值
pCur->next = pPre;
pPre = pCur;
pCur = pNext;
}
L->next = NULL;//没有这句就构成环形链表 末端节点之前还指向头部
L = pPre; //记录下新的头结点 没有这句链表断了
return L;
}