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));
    
    	}
    
    }
    
  • 相关阅读:
    Java面试题(转)
    哪种方式更适合在React中获取数据?
    vue学习之深入响应式原理
    还不会用FindBugs?你的代码质量很可能令人堪忧
    几道大数据面试题(转)
    【Medium翻译】Java抽象类有什么用?
    深入理解Kafka必知必会(上)
    (八十六)c#Winform自定义控件-表格优化(转载)
    IDEA 配置及常用快捷键
    Markdown 复杂公式&常用符号
  • 原文地址:https://www.cnblogs.com/horken/p/10706127.html
Copyright © 2011-2022 走看看