zoukankan      html  css  js  c++  java
  • LeetCode OJ:Reverse Linked List (反转链表)

    Reverse a singly linked list.

    做II之前应该先来做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 == NULL) return NULL;
    13         ListNode * prev = NULL;
    14         ListNode * p = head;
    15         ListNode * next;
    16         while(p != NULL){
    17             next = p->next;
    18             p->next = prev;
    19             prev = p;
    20             p = next;
    21         }
    22         return prev;
    23     }
    24 };

     java版本的如下所示,基本上没什么区别,就是普通解法:

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 public class Solution {
    10     public ListNode reverseList(ListNode head) {
    11         if(head == null)return null;
    12         ListNode helper = new ListNode(-1);
    13         helper.next = head;
    14         ListNode p = helper;
    15         ListNode pPre = helper.next;
    16         ListNode tmp = null;
    17         while(p.next!=null){
    18             tmp = p.next;
    19             p.next = pPre;
    20             pPre = p;
    21             p = tmp;
    22         }
    23         p.next = pPre;
    24         helper.next.next = null; //记得将尾节点的下一个指向null
    25         return p;
    26     }
    27 }

    其实翻转链表还可以使用一种递归的方式,代码如下:

     1 ListNode * ReverseListIncur(ListNode * node, ListNode * prev)
     2 {
     3     if (node == NULL)
     4         return NULL;
     5     ListNode * tmp = ReverseListIncur(node->next, node);
     6     node->next = prev;
     7     if (tmp == NULL)
     8         return node;
     9     else
    10         return tmp;
    11 }
  • 相关阅读:
    又到黄金季节,该跳槽吗?怎么跳?
    分布式事务 6 个技术方案
    15 个 MyBatis 技巧,赶紧收藏吧!
    你的工资被倒挂了吗
    终于知道 Java agent 怎么重写字节码了
    每天的工作,你腻了吗?
    10 分钟轻松学会 Jackson 反序列化自动适配子类
    SpringMVC异步处理的 5 种方式
    Linux Cron 定时任务
    人类简史、软件架构和中台
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4874295.html
Copyright © 2011-2022 走看看