单链表逆置
带头结点的
void Reverse(List plist)
{
assert(plist!=NULL);
List p,q,s;
p = plist->next;
q = NULL;
plist->next = NULL;
while (p != NULL)
{
s = p->next;
p->next = q;
q = p;
p = s;
}
plist->next = q;
}
class Solution {
public:
ListNode* ReverseList(ListNode* pHead)
{
ListNode *pre = nullptr;
ListNode *cur = pHead;
ListNode *nex = nullptr;
while (cur)
{
nex = cur->next;
cur->next = pre;
pre = cur;
cur = nex;
}
return pre;
}
};
利用头插实现单链表的逆置
void Reverse2(List PList)
{
assert(PList != NULL);
Node *p = PList->next;
Node *q;
//断开头结点
PList->next = NULL;
//将原本头结点后每一个第一个节点头插到链表中去
while(p != NULL)
{
q = p->next;
p->next = PList->next;
PList->next = p;
p = q;
}
不带头结点的
void reverse(List &L)
{
List p,q;
p=NULL; q=L;
while(q!=NULL)
{
L=L->next;
q->next=p;
p=q;
q=L;
}
L=p;
}