您的位置:首页 > 其它

反转单链表

2017-11-18 19:30 169 查看
面试中经常遇到反转单链表,特此总结。

递归版

ListNode* reverseListRecursive(ListNode *head)
{
if(head == NULL || head->next == NULL)
return head;
ListNode *newHead = reverseListRecursive(head->next);
head->next->next = head;
head->next = NULL;
return newHead;
}


算法执行过程如下











非递归版

将头结点后面的结点通过头插法一个个地插入到链表前面。

ListNode* reverseList(ListNode *head)
{
if(head == NULL || head->next == NULL)
return head;
ListNode *newHead = NULL;
ListNode *p = head;
while (p != NULL)
{
ListNode *tmp = p;
p = p->next;
tmp->next = newHead;
newHead = tmp;
}
return newHead;
}


算法执行流程如下

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