前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一道leetcode206-反转链表

每天一道leetcode206-反转链表

作者头像
乔戈里
发布2019-09-17 14:21:03
2780
发布2019-09-17 14:21:03
举报
文章被收录于专栏:Java那些事

题目

leetcode206-反转链表 分类:链表 中文链接: https://leetcode-cn.com/problems/reverse-linked-list/ 英文链接: https://leetcode.com/problems/reverse-linked-list/

题目详述

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

题目详解

思路

  1. 反转链表的话就是需要用三个节点,分别是pre节点代表前一个节点,pNode节点是当前节点,next节点是当前节点的下一个节点;
  2. 我的方法是先去处理最开始的那一个节点,也就是头结点,令头结点的next置为空,然后,pre指向头结点,pNode当前节点是指向head.next,next是指向pNode节点的下一个节点;这是初始化操作;
  3. 然后接下来的操作就是,先用next保存下来pNode的下一个节点,然后就是pNode指向pre,因为pre是pNode的上一个节点,这样可以让反转,因为这里已经反转完毕了,然后就是就是pre和pNode同时往后面进行移动;
  4. 如何移动,很简单就是pre先指向pNode,然后pNode指向next;
  5. 最后循环结束的时候,pNode为空,pre是pNode的前一个,pre是最后一个节点,也是就反转后的头结点,最后返回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) {
        if(head == null || head.next == null)
            return head;
        ListNode pre = head;
        ListNode pNode = head.next;
        ListNode next = head;
        //首先处理前两个节点;
        pre.next = null;
        while(pNode != null)
        {
            next = pNode.next;
            pNode.next = pre;
            pre = pNode;
            pNode = next;
        }
        return pre;
    }
}

代码讲解

  • 13-17行代码就是处理最开始的第一个节点,令最开始的pre的下一个为null,最开始的节点是反转后的末尾节点,所以应该这样做
  • 18-24行就是反转链表的中间部分,对应思路中的3和4
  • 25行就是返回pre,也就是新的头结点

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 题目详述
  • 题目详解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档