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

    题目:

    反转一个单链表。

    示例:

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

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

    解题思路:

    1、迭代方法,从前往后扫描一遍,以此改变当前指针p的指向,其中用到三个指针,当前指针p,上一指针last,头指针pHead。

    2、递归方法,一层一层的递归到最后一个节点,再以此返回改变指向。

    代码:

    解法1:迭代

     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         if(!head || !head->next)
    13             return head;
    14         ListNode* pHead = head;
    15         ListNode* p = pHead->next;
    16         ListNode* pre = (ListNode*)malloc(sizeof(ListNode));
    17         pre->next = head;
    18         ListNode* last = head;
    19         while(p)
    20         {
    21             last->next = p->next;
    22             p->next = pHead;
    23             pHead = p;
    24             p = last->next;
    25         }
    26         return pHead;
    27     }
    28 };

    解法2:递归

     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* reverse(ListNode* pHead, ListNode* last)
    12     {
    13         ListNode* ans;
    14         if(pHead->next != NULL)
    15             ans = reverse(pHead->next, pHead);
    16         else
    17             ans = pHead;
    18         pHead->next = last;
    19         return ans;
    20     }
    21     ListNode* reverseList(ListNode* head) {
    22         if(!head || !head->next)
    23             return head;
    24         ListNode* ans;
    25         ans = reverse(head, NULL);
    26         return ans;
    27     }
    28 };
  • 相关阅读:
    MS SQL Server版本的选择
    ANSI,ASCII,Unicode的区别与联系!
    解决MSSQL中插入中文数据显示乱码的问题!
    ASP.NET中website与webApplication有何区别?
    常用SQL语句总结.
    外键的具体应用和表连接!
    String和datetime在SQL中和在C#中相互转换方法总结
    外键的学习
    if(!IsPostBack)的使用?
    如何在模板的内容页中添加javascript代码?
  • 原文地址:https://www.cnblogs.com/moxiangfeng/p/10734088.html
Copyright © 2011-2022 走看看