leetcode_206_反转链表

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?


很不错的图解    递归和迭代
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        //递归
        ListNode* newHead = NULL;
    while (head) {
        ListNode* nextNode = head->next;
        head->next = newHead;
        newHead = head;
        head = nextNode;
    }
    return newHead;
    }
};
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseListIter(ListNode* head, ListNode* newHead) {
        //迭代
        if (head == NULL) return newHead;
        ListNode* nextNode = head->next;
        head->next = newHead;
        return reverseListIter(nextNode, head);
    }
 
    ListNode* reverseList(ListNode* head) {
        return reverseListIter(head, NULL);
    }
};



你可能感兴趣的:(leetcode,c++)