LeetCode.206 反转链表

问题描述
反转一个单链表。

示例:

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

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

迭代实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    //iteration
    struct ListNode *pre=NULL;
    struct ListNode *curr=head;
    while(curr){
        struct ListNode *next=curr->next;
        curr->next=pre;
        pre=curr;
        curr=next;
    }
    return pre;
}

递归实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    //recursive 
    if(head==NULL || head->next==NULL){
        return head;
    }
    struct ListNode* rest=reverseList(head->next);;
    head->next->next=head;
    head->next=NULL;
    return rest;
}

猜你喜欢

转载自blog.csdn.net/cjdm66/article/details/81411956