前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leecode刷题(22)-- 反转数组

leecode刷题(22)-- 反转数组

作者头像
希希里之海
发布2019-03-19 17:33:23
4510
发布2019-03-19 17:33:23
举报
文章被收录于专栏:weixuqin 的专栏weixuqin 的专栏

leecode刷题(22)-- 反转数组

反转数组

反转一个单链表。

示例:

代码语言:javascript
复制
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

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


思路:

很明显,链表问题我们要通过改变指针指向来解决问题:

首先定义 per, key, last 三个指针:

代码语言:javascript
复制
pre    key  last
null    1 -> 2 -> 3 -> 4 -> null

key.next = pre :

代码语言:javascript
复制
pre    key  last
null  <- 1   2 -> 3 -> 4 -> null

再让 pre = key, key = last, last = last.next

代码语言:javascript
复制
        pre  key  last
null  <- 1   2 -> 3 -> 4 -> null

重复上述操作直到 last = null

代码语言:javascript
复制
                    pre key  last
null <- 1 <- 2 <- 3 <-4  5 -> null

最后让 key.next = pre 即可:

代码语言:javascript
复制
                     pre  key  last
null <- 1 <- 2 <- 3 <-4 <- 5   null

返回反转后的链表,其实也就是 key

代码如下:

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode key = head;
        ListNode last = head.next;
        
        while(last != null) {
            key.next = pre;
            pre = key;
            key = last;
            last = last.next;
        }
        key.next = pre;
        return key;
    }
}

优化:

上述代码在leecode 能通过执行,但是有个问题,就是当 head = null 时,我们设置 ListNode last = head.next 就会出错,所以先判断 head(即我们设置的 key)是否为0,再设置 last 指针,然后改变设置的指针指向,当 key = null 时,我们返回 pre 。改为下述代码。

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode key = head;
        
        while(key != null) {
            ListNode last = key.next;
            key.next = pre;
            pre = key;
            key = last;
        }
        return pre;
    }
}

PS:

Java 中没有指针的概念,所以把我文章中所说的指针在代码中当作节点就好啦。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • leecode刷题(22)-- 反转数组
    • 反转数组
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档