zoukankan      html  css  js  c++  java
  • Leetcode刷题笔记—206. Reverse Linked List

    一、问题

    反转一个单链表。

    示例:

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL
    进阶:
    你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/reverse-linked-list
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    二、解决

    设置指向当前节点为cur,指向当前节点的下一个节点为next和指向当前节点的前一个节点pre

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* reverseList(ListNode* head) {
    12         ListNode* pre=NULL;  
    13         ListNode* cur=head;  // 声明个指针指向当前元素,初始指向head头节点
    14         while(cur!=NULL){   // 如果当前节点元素不为空
    15             ListNode* next=cur->next;  // 声明个next指针指向 当前节点的下一个节点
    16             
    17             cur->next=pre;   // 将 cur下一个节点指向 cur的前一个结点。实现反转
    18             pre=cur;  // pre指针指向cur现在的位置
    19             cur=next;  // cur 指向 next 指向的位置
    20         }
    21         return pre; // 循环结束后cur指向的是空结点,则cur的前一个节点则为反转后新的头节点
    22         
    23     }
    24 };

    时间复杂度O(n)。 只开了三个指针的控件,空间复杂度 O(1)

    代码参考:https://github.com/liuyubobobo/Play-Leetcode

    本博客为博主的学习笔记,不作任何商业用途。
  • 相关阅读:
    线程安全的signals
    排序
    TCMalloc : ThreadCaching Malloc
    C++箴言:争取异常安全的代码
    windows 内存泄露debug的相关函数
    分析几个驱动
    CAsyncSocket对象不能跨线程之分析 (转载)
    优化理论
    标 题: C++0x把Concept去掉了
    几个流行的http 服务器开源软件
  • 原文地址:https://www.cnblogs.com/guo7533/p/11180703.html
Copyright © 2011-2022 走看看