void reverse(list *head)
{
list?*p,?*q;
p?=?head->next;//p指向當(dāng)前正在處理的節(jié)點(diǎn)
q =?p->next;//tmp指向尚未被處理的第一個節(jié)點(diǎn)
p->next?=?NULL;//原單鏈表第一個節(jié)點(diǎn)將成為倒置后最后一個節(jié)點(diǎn)
head->next?=?p;//插入單鏈表表頭后面
p?=?q;//開始處理接下來的節(jié)點(diǎn)們
while(p)?{
q =?p->next;
p->next?=?head->next;
head->next?=?p;
p?= q;
}
}
(頭結(jié)點(diǎn)不算,從第一個節(jié)點(diǎn)開始)
思想是,遍歷整個鏈表的同時(shí),將正在訪問的節(jié)點(diǎn)插入到鏈表頭部。
這樣,當(dāng)遍歷結(jié)束后,同時(shí)完成了鏈表的倒置。
方法二:
LinkList reverse(LinkList L)//單鏈表的倒置算法
{
LNode*p,*q;
p=L->next;
L->next=NULL;
while(p)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
returnL;
}