zoukankan      html  css  js  c++  java
  • java实现一个简单的单链表反转

    自定义一个单链表,实现链表反转:

    1.普通方法实现

    2.递归方式实现

    package listNode;
    public class ReverseNode {
        public static void main(String[] args) {
            Node head  = new Node(0);
            Node node1 = new Node(1);
            Node node2 = new Node(2);
            Node node3 = new Node(3);
    
            head.setNext(node1);
            node1.setNext(node2);
            node2.setNext(node3);
            // 打印反转前的链表
            Node h = head;
            System.out.println("原链表:");
            while (null != h) {
                System.out.print(h.getData() + " ");
                h = h.getNext();
            }
            // 调用反转方法
            // head = reverse1(head);
            Node rehead = revers1(head);
            System.out.println("
    *********两极反转*********");
            System.out.println("反转后的链表:");
            // 打印反转后的结果
            while (null != rehead) {
                System.out.print(rehead.getData() + " ");
                rehead = rehead.getNext();
            }
        }
    
    
    
    
    
    
        /**
         * 1.普通方法
         *遍历,将当前节点的下一个节点缓存后更改当前节点指针
         */
        public static Node reverse2(Node head) {
            if (head == null)
                return null;
            Node pre = head;// 上一结点
            Node cur = head.getNext();// 当前结点
            Node tmp;// 临时结点,用于保存当前结点的指针域(即下一结点)
            while (cur != null) {// 当前结点为null,说明位于尾结点
                tmp = cur.getNext();
                cur.setNext(pre);// 反转指针域的指向
                // 指针往下移动
                pre = cur;
                cur = tmp;
            }
            // 最后将原链表的头节点的指针域置为null,还回新链表的头结点,即原链表的尾结点
            head.setNext(null);
            return pre;
        }
        
        
    
        //2.递归反转单链表
        public static Node revers1(Node head){
            //链表为空、或者只有一个节点时,直接返回原链表
            if (head==null||head.getNext()==null){
                return head;
            }
    
            Node newNode = revers1(head.getNext());//递归,直到找到尾结点
            System.out.println(newNode);
            head.getNext().setNext(head); //当前节点的指针指向上一个节点
            head.setNext(null); //断开原来的指针
            return newNode;//返回原链表的尾节点,也就是新链表的头节点
        }
    
    
    }
    
    
    
    
    
    
    /**
     *作者: 柯神_
     *时间: 13:58
     *日期: 2020/10/24
     *User: 蜘蛛啊全是腿儿
    **/
    
    class Node {
        private int Data;// 数据域
        private Node Next;// 指针域
    
        public Node(int Data) {
            // super();
            this.Data = Data;
        }
    
        public int getData() {
            return Data;
        }
    
        public void setData(int Data) {
            this.Data = Data;
        }
    
        public Node getNext() {
            return Next;
        }
    
        public void setNext(Node Next) {
            this.Next = Next;
        }
    
        @Override
        public String toString() {
            return "Node{" +
                    "Data=" + Data +
                    ", Next=" + Next +
                    '}';
        }
    }
    
  • 相关阅读:
    线性表链式存储方式的C语言实现
    线性表顺序存储方式的C语言实现
    抽象数据类型Triplet的C语言实现
    Python之装饰器
    Django-auth(认证系统)
    Django-中间件
    Django-form表单
    Python cookie、session和自定义分页
    Django 使用ajax上传文件
    Python之迭代器和生成器
  • 原文地址:https://www.cnblogs.com/qqkkOvO/p/13943938.html
Copyright © 2011-2022 走看看