您的位置:首页 > 其它

链表如何逆序

2013-11-05 15:43 183 查看
很久没有重温数据结构了,大学时期不够努力阿,有些经典的算法没有掌握,这里补充一下。

1、逆序问题用三个字解决:前插法

L->1->2->3->4->5->NULL //L为原表

p = L;

L = NULL;

---------------------

L->1->NULL

p->2->3->4->5->NULL

---------------------

L->2->1->NULL

p->3->4->5->NULL

---------------------

...

关键代码仅四行:

p = L;

q = NULL;

L = NULL;

while(p)

{

q = p->next;

p->next = L;

L = p;

p = q;

}

while结束了,逆转也OK了

逆转后头指针仍为L

=====================================

2、直接将指针全部反转。

head这里为头结点。

Linklist* LinkReverse(Linklist *head)

{

if (head == NULL || head ->next == NULL || head->next-next == NULL)

{

reurn head;
//只有一个节点或头节点为空,空操作

}

LinkList *p = head->next;

LinkList *q = head->next->next;

while(q)

{

t = q->next;

q->next = p;

p = q;

q = t;

}

head->next->next = NULL; /*设置链表尾*/

head->next = p;

return head;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: