c_cpp 206.反向链接清单 - 简单 - 2018.7.31

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 206.反向链接清单 - 简单 - 2018.7.31相关的知识,希望对你有一定的参考价值。

/**
使用中间量不断保存前面处理过程中被覆盖的内容
解法解析:
1:先处理链表尾部的元素,再回头处理前面的元素
2:需要先把最后面的元素保存后返回作为新的链表头
 */
 
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *newH;
        if (!head || head->next == NULL) {
            return head;
        } else {
            newH = reverseList(head->next);
        }
        head->next->next = head;
        head->next = NULL;
        return newH;
    }
};

//非递归
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (!head) return NULL;
        ListNode *preNode = NULL;
        ListNode *nextNode;
        // 这里不能直接使用 head != NULL,因为要确保跳出循环的时候,head 不为 NULL
        while (head->next != NULL) {
            nextNode = head->next; 
            head->next = preNode;
            preNode = head;
            head = nextNode;
        }
        head->next = preNode;
        return head;
    }
};

以上是关于c_cpp 206.反向链接清单 - 简单 - 2018.7.31的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 92.反向链接清单II - 中 - 2018.7.31

java 206.反向链接列表(#1递归).java

java 206.反向链接列表(#1递归).java

java 206.反向链接列表(#1递归).java

java 206.反向链接列表(#1递归).java

java 206.反向链接列表(#1递归).java