24反转链表

Posted redzzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了24反转链表相关的知识,希望对你有一定的参考价值。

题目描述:

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

 

示例:

输入: 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){
    struct ListNode *cur=head;
    struct ListNode *pre=NULL;
    while(cur!=NULL)
    {
        struct ListNode *tmp=cur->next;
        cur->next=pre;
        pre=cur;
        cur=tmp;
    }
    return pre;
}

 

总结:

三种方法:

①利用外部空间

申请一个动态扩容的数组,将整个链表中的值存入数组或者容器中,然后反向取出

但是这种方法空间复杂度高,不是一种很好的方法

②双指针迭代

定义两个指针,一个pre,一个cur,以及一个tmp临时变量,用来保存cur->next的值

循环结束的条件是cur指向为空,则pre当前指向的元素就是反转链表要返回的元素

③递归解法:

递归法代码不会写

 

以上是关于24反转链表的主要内容,如果未能解决你的问题,请参考以下文章

24反转链表

剑指Offer-代码的鲁棒性面试题24:反转链表

剑指 Offer 24. 反转链表

剑指 Offer 24. 反转链表 c++/java详细题解

剑指 Offer 24. 反转链表 c++/java详细题解

LeetCode(剑指 Offer)- 24. 反转链表