剑指offer(十五)反转链表

写在前面:

为了增长一下自己的数据结构能力,也为了面试准备,准备将剑指Offer做一下,并与各位分享,希望各位可以对代码以及思路提提建议,欢迎志同道合者,谢谢。

题目:
输入一个链表,反转链表后,输出新链表的表头。
大三的发生的环境

思路:

假设链表
1-2-3-4-5-6-7
长度为7的链表,要反转为7-6-5-4-3-2-1

我们新建一个链表头,一个中间节点k(用于交换的), 第一步,我们将1这个节点的next赋值给中间节点k,然后我们将1这个节点设置为链表头,1的next为null,然后我们在将k这个节点保存,然后k的next设置为k,前面保存的k设置为链表头,next设置为1

代码实现

package com.itzmn.offer;

/**
 * @Auther: 张梦楠
 * @Date: 2018/7/30 10:24
 * 简书://www.greatytc.com/u/d611be10d1a6
 * 码云:https://gitee.com/zhangqiye
 * @Description:
 */
public class Offer15 {


    public static void main(String[] args) {

        new Offer15().init();
    }

    private void init() {
        ListNode listNode = new ListNode(2);
        ListNode listNode1 = new ListNode(3);
        ListNode listNode3 = new ListNode(4);
        ListNode listNode4 = new ListNode(5);
        ListNode listNode5 = new ListNode(6);

        listNode.next = listNode1;
        listNode1.next = listNode3;
        listNode3.next = listNode4;
        listNode4.next = listNode5;

        ListNode listNode2 = ReverseList(listNode);

        display(listNode2);

    }

    /**
     * 反转链表,返回新链表的表头
     * 思路:
     *  将每个节点分开之后,将后一个节点的next指向前一个节点
     * @param head
     * @return
     *  1 2 3
     */
    public ListNode ReverseList(ListNode head) {

        //保存链表节点的前一个节点
        ListNode pre = null;
        //保存链表节点的下一个节点
        ListNode next = null;

        while (head != null){

            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }

        return pre;

    }


    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }

    public void display(ListNode node){
        while (node != null){
            System.out.print(node.val +" ");
            node = node.next;
        }
        System.out.println();
    }

}

希望大家可以多多指点,优化一下,
QQ群:552113611

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,618评论 1 45
  • 1. 逆序打印链表(单链表) 给定单链表,从尾到头打印每个节点的值,不同的值之间用空格隔开。比如:1>2>3>4>...
    少冰三hun甜阅读 4,051评论 1 12
  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 1,535评论 0 6
  • “读万卷书,行万里路”,这句话我们耳熟能详,“书中自有黄金屋,书中自有颜如玉”。多读书,见识广,为写作做好储备。 ...
    雪花飘飘xhpp阅读 469评论 0 7
  • 大家好,我是大师兄,今天为您分享的秘诀叫私密,其威力是非常大的。私密主要有两大威力:第一,让购买的客户感觉到惊喜,...
    mxxyfyz阅读 1,178评论 0 0