写在前面:
为了增长一下自己的数据结构能力,也为了面试准备,准备将剑指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 * 简书:https://www.jianshu.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(); } }
作者:z七夜
链接:https://www.jianshu.com/p/b0b963da6da2