zoukankan      html  css  js  c++  java
  • LeetCode206 反转链表

    反转一个单链表。

    示例:

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

    递归:

    递归到尾节点,然后往回;每次都是返回尾结点。对于每个递归栈的head,将head->next->next设置为自己,即把下一个的下一个设为自己;再把自己的next设置为nullptr,否则头部的next还是指向原来得下一个,会出错

    迭代:

    一样的思想,只是要提前保存下一个节点。

     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         return iterate(head);
    13     }
    14 
    15     ListNode* iterate(ListNode* head){
    16         if(head==nullptr)
    17             return head;
    18         ListNode* prev=head;
    19         head=head->next;
    20         prev->next=nullptr;
    21         while(head!=nullptr){
    22             ListNode* save=head->next;
    23             head->next=prev;
    24             prev=head;
    25             head=save;
    26         }
    27         return prev;
    28     }
    29 
    30     ListNode* recursive(ListNode* head){
    31         if(head==nullptr || head->next==nullptr){
    32             return head;
    33         }
    34         ListNode* ret=recursive(head->next);
    35         head->next->next=head;
    36         head->next=nullptr;
    37         return ret;
    38     }
    39 };
  • 相关阅读:
    Google glass GDK
    Google glass GDK
    Google glass GDK
    趣味开发
    Android
    Google glass GDK
    Google glass GDK
    Google glass GDK
    Android
    Google glass GDK
  • 原文地址:https://www.cnblogs.com/rookiez/p/13355888.html
Copyright © 2011-2022 走看看