zoukankan      html  css  js  c++  java
  • 算法总结之 反转单向和双向链表

    分别实现反转单向和双向链表的函数

    看代码:

    package TT;
    
    public class Test88 {
    
        public class Node{
             public int value;
             public Node next;
             public Node(int data){
                  this.value = data;
             }
        }
        
        public Node reverseList(Node head){
              Node pre = null;
              Node next = null;
              while(head!=null){
                  next = head.next;
                  head.next = pre;
                  pre = head;
                  head = next;
              }
              return pre;
        }
    
    }

     可以用栈实现:

      

    class Node {
        int value;
        Node next;
    
        public Node(int value) {
            this.value = value;
        }
    }
    public class Test19 {
    
        public static Node getReverseList(Node node) {
            Stack<Node> stack = new Stack<>();
            while (node != null) {
                Node now = node;
                stack.push(now);
                node=node.next;
            }
           Node pre = stack.pop();
           Node result = pre;
           Node next = null;
            while (!stack.isEmpty()) {
                next = stack.pop();
                pre.next=next;
                pre=next;
            }
            next.next=null;
            return result;
        }
        public static void main(String[] args) {
            Node node1 = new Node(1);
            Node node2 = new Node(2);
            Node node3 = new Node(3);
            Node node4 = new Node(4);
    
            node1.next=node2;
            node2.next=node3;
            node3.next=node4;
            node4.next=null;
    
            Node resultNode = getReverseList(node1);
            while (resultNode !=null){
                System.out.println(resultNode.value);
                resultNode=resultNode.next;
            }
        } 
    
    }

    反向双向链表

    package TT;
    
    
    
    import TT.Test86.DoubleNode;
    
    public class Test89 {
    
        public DoubleNode{
            public int  value;
            public DoubleNode last;
            public DoubleNode pre;
            public DoubleNode(int data){
                this.value = data;
            }
        }
        
        public DoubleNode reverseList(DoubleNode head){
            DoubleNode pre = null;
            DoubleNode next = null;
            while(head!=null){
                next = head.next;
                head.next = pre;
                head.last = next;
                pre = head;
                head = next;
                
                
            }
            return pre;
        }
            
    }

     调节指针的算法:

    class Node {
        int value;
        Node next;
    
        public Node(int value) {
            this.value = value;
        }
    }
    public class Test19 {
    
        public static Node getReverseList(Node node) {
            Node last = null;
            Node pre = node;
            Node next = node.next;
            while (pre.next != null){
               pre.next=last;
               last=pre;
               pre= next ;
               next=next.next;
            }
            pre.next=last;
            return  pre;
        }
        public static void main(String[] args) {
            Node node1 = new Node(1);
            Node node2 = new Node(2);
            Node node3 = new Node(3);
            Node node4 = new Node(4);
    
            node1.next=node2;
            node2.next=node3;
            node3.next=node4;
            node4.next=null;
    
            Node resultNode = getReverseList(node1);
            while (resultNode !=null){
                System.out.println(resultNode.value);
                resultNode=resultNode.next;
            }
        } 
    
    }
  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/toov5/p/7499225.html
Copyright © 2011-2022 走看看