单链表反转


public class ReverseListTest {
    static class Node {
        public int num;
        public Node next;

        public Node(int n) {
            this.num = n;
        }
    }

    public static void main(String[] args) {
        int[] src = new int[]{1, 2, 3, 4, 5};
        Node head = arrayToNode(src);
        printNode(head);
        Node newHead = reverseList(head);
        printNode(newHead);
    }

    public static Node arrayToNode(int[] arr) {
        Node head = new Node(arr[0]); // 把数组的第一个位置定义为头结点
        Node cur = head; // 一个指针,此时指向头结点
        for (int i = 1; i < arr.length; i++) { //头结点已经定义,从1开始
            //尾插法
            Node newNode = new Node(arr[i]);
            cur.next = newNode;
            cur = cur.next;
        }
        return head;
    }


    public static Node reverseList(Node head) {
        Node pre = null; //前指针节点
        Node cur = head; //当前指针节点
        Node next = null;
        while (cur != null) {
            next = cur.next; //临时保存当前节点的下一个节点
            cur.next = pre; //当前节点指向前面一个节点
            pre = cur; //前节点后移
            cur = next; //当前节点后移
        }
        return pre;
    }


    public static void printNode(Node node) {
        while (node != null) {
            System.out.print(node.num + " ");
            node = node.next;
        }
        System.out.println();
    }
}

输出:


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

推荐阅读更多精彩内容

  • 单链表反转是当前节点与上一个节点建立关系,依次反复,最后输出新的头节点的过程。 准备工作:定义一个链表的节点对象:...
    小胖学编程阅读 732评论 0 5
  • 反转一个单链表 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL
    暮想sun阅读 38评论 0 0
  • 要求很简单,输入一个链表,反转链表后,输出新链表的表头。反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考...
    Bfmall阅读 196评论 0 1
  • 要求很简单,输入一个链表,反转链表后,输出新链表的表头。  反转链表是有2种方法(递归法,遍历法)实现的,面试官最...
    上帝爱吃苹果阅读 16,456评论 4 21
  • 前言 反转链表是程序员必备的基本素养,经常在面试、笔试的过程中出现。一直觉得反转链表实现代码不是很好理解,决定搬l...
    Java天天阅读 540评论 0 2