码迷,mamicode.com
首页 > 其他好文 > 详细

24反转链表

时间:2020-07-22 11:12:33      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:reverse   利用   好的   动态   str   ext   for   while   动态扩容   

题目描述:

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

 

示例:

输入: 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反转链表

标签:reverse   利用   好的   动态   str   ext   for   while   动态扩容   

原文地址:https://www.cnblogs.com/redzzy/p/13359100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!