剑指offer系列之十四:反转链表

来源:互联网 发布:数据库nvl 编辑:程序博客网 时间:2024/05/25 13:33

题目描述

输入一个链表,反转链表后,输出链表的所有元素。

思路如下:在遍历链表上的每个节点的时候,就修改其指针,当遍历到最后一个结点的时候,整个链表就反转完成了。所以需要创建三个变量:一个是当前遍历的结点,一个是遍历结点的前一个结点,还有一个是当前遍历结点的下一个结点。基于这种思路可以写出如下的实现代码(已被牛客AC):

package com.rhwayfun.offer;public class ReverseLinkedList {    public static class ListNode {        int val;        ListNode next = null;        ListNode(int val) {            this.val = val;        }    }    public ListNode ReverseList(ListNode head) {        //反转之后链表的头结点        ListNode reverseListHead = null;        //当前遍历的结点        ListNode curNode = head;        //遍历到的结点的前一个结点,该节点的作用让当前遍历到的指向其前一个结点        ListNode preNode = null;        while(curNode != null){            //当前遍历结点的下一个结点            ListNode nextNode = curNode.next;            if(nextNode == null) reverseListHead = curNode;            curNode.next = preNode;            preNode = curNode;            curNode = nextNode;        }        return reverseListHead;    }    public static void main(String[] args) {        ListNode head = new ListNode(1);        ListNode node1 = new ListNode(2);        ListNode node2 = new ListNode(3);        ListNode node3 = new ListNode(4);        ListNode node4 = new ListNode(5);        head.next = node1;        node1.next = node2;        node2.next = node3;        node3.next = node4;        ListNode pHead = new ReverseLinkedList().ReverseList(head);        while(pHead != null){            System.out.println(pHead.val);            pHead = pHead.next;        }    }}
0 0
原创粉丝点击