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

来源:互联网 发布:win7开机优化加速 编辑:程序博客网 时间:2024/05/29 17:37

今晚抽时间复习了链表,整理了递归版本和非递归版本的单链表翻转,欢迎指出错误。

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;}


0 0
原创粉丝点击