zoukankan      html  css  js  c++  java
  • 如何翻转单链表和双向链表

    package class_03;
    
    public class Code_07_ReverseList {
    
    	public static class Node {
    		public int value;
    		public Node next;
    
    		public Node(int data) {
    			this.value = data;
    		}
    	}
    
    	public static 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;
    	}
    
    	public static class DoubleNode { // 双向链表
    		public int value;
    		public DoubleNode last;
    		public DoubleNode next;
    
    		public DoubleNode(int data) {
    			this.value = data;
    		}
    	}
    
    	public static 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;
    	}
    
    	public static void printLinkedList(Node head) {
    		System.out.print("Linked List: ");
    		while (head != null) {
    			System.out.print(head.value + " ");
    			head = head.next;
    		}
    		System.out.println();
    	}
    
    	public static void printDoubleLinkedList(DoubleNode head) {
    		System.out.print("Double Linked List: ");
    		DoubleNode end = null;
    		while (head != null) {
    			System.out.print(head.value + " ");
    			end = head;
    			head = head.next;
    		}
    		System.out.print("| ");
    		while (end != null) {
    			System.out.print(end.value + " ");
    			end = end.last;
    		}
    		System.out.println();
    	}
    
    	public static void main(String[] args) {
    		Node head1 = new Node(1);
    		head1.next = new Node(2);
    		head1.next.next = new Node(3);
    		printLinkedList(head1);
    		head1 = reverseList(head1);
    		printLinkedList(head1);
    
    		DoubleNode head2 = new DoubleNode(1);
    		head2.next = new DoubleNode(2);
    		head2.next.last = head2;
    		head2.next.next = new DoubleNode(3);
    		head2.next.next.last = head2.next;
    		head2.next.next.next = new DoubleNode(4);
    		head2.next.next.next.last = head2.next.next;
    		printDoubleLinkedList(head2);
    		printDoubleLinkedList(reverseList(head2));
    
    	}
    
    }
    
  • 相关阅读:
    在C#中使用消息队列RabbitMQ
    从url到页面经历了什么
    jsonp跨域远离
    DNS预处理
    一个架构师需要考虑的问题
    angular2和Vue2对比
    图片多的问题
    xinwenti
    xss和csrf
    ajax是什么
  • 原文地址:https://www.cnblogs.com/horken/p/10706127.html
Copyright © 2011-2022 走看看