您的位置:首页 > 编程语言 > C语言/C++

单链表递归反转和非递归翻转

2016-09-21 23:19 225 查看
今晚抽时间复习了链表,整理了递归版本和非递归版本的单链表翻转,欢迎指出错误。

1、递归版本

调用:

ListNode * head = NULL;
reverseRec(root, head);//head即为反转后得链表头
实现如下:

void reverseRec(ListNode *root, ListNode *&head){
if (root == NULL)
return;
if (root->next == NULL){
head = root;
return;
}
reverseRec(root->next, head);
root->next->next = root;
root->next = NULL;
}

2、非递归版本

调用:

ListNode *head = reverse(root);//head即为翻转后的链表头


实现如下:

ListNode* reverse(ListNode *root)
{
if (root == NULL || root->next == NULL)
return root;
ListNode *cur = root;
ListNode *reverseHead = NULL;
ListNode *pre = NULL;
while (cur != NULL)
{
ListNode *tmp = cur->next;
if(tmp == NULL){
reverseHead = cur;
}
cur->next = pre;
pre = cur;
cur = tmp;
}
return reverseHead;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 单链表 递归 链表