• 每日一题 为了工作 2020 0319 第十七题


    /**
    * 问题:反转双向链表
    *
    * 要求:
    * 如果链表长度为 N,时间复杂度为O(N),额外的空间复杂度为O(1)。
    *
    * @author 雪瞳
    *
    */

    public class Node<T>{
    	public T value;
    	public Node next;
    	public Node last;
    	public Node(T data){
    		this.value =data;
    	}
    }
    

      

    public class reverseList {	
    	private Node current = null;
    	private Node currentNext = null;
    	public Node reverse(Node head) {	
    	    ///记录current的节点是head的下一个节点。
    	    current = head.next;
    	    //切断 head.next指向current
    	    //头节点变尾结点 head的下一个设为空
    	    head.next = null;   
    	    
    	    while(current != null) {
    	        //记录currentNext的节点是current的下一个节点。
    	    	currentNext = current.next;
    	        //current是当前节点 
    	    	//将当前节点的下一节点重新更改指向,第一次也就是之前被截断的 head头节点
    	        current.next = head;
    	        current.last = currentNext;
    	        //将头节点和当前节点重新赋值
    	        head = current; 
    	        current = currentNext;
    	    } 
    	    return head;
    	}
    }
    

      

    import java.util.Random;
    import java.util.Scanner;
    
    public class testReverseList {
    	public static void main(String[] args) {
    		reverseList reverse = new reverseList();
    		testReverseList test = new testReverseList();
    		Random rand = new Random();	
    		Scanner sc = new Scanner(System.in);
    		System.out.println("请输入链表长度");
    		int K = sc.nextInt();
    		
    		Node nodes[]=new Node[K];
    		for(int i=0;i<nodes.length;i++) {
    			nodes[i]=new Node(rand.nextInt(20)+1);
    		}
    		for(int i =0;i<nodes.length-1;i++) {
    			nodes[i].next=nodes[i+1];
    		}
    		Node head = nodes[0];
    		//test
    		test.showNode(head);
    		Node reverseNode = reverse.reverse(head);
    		test.showNode(reverseNode);
    		
    	}
    	public void showNode(Node head) {
    		System.out.println("链表内的元素如下所示...");
    		while(head != null) {
    			System.out.print(head.value+"	");
    			head = head.next;
    		}
    		System.out.println();
    	}
    }
    

      

  • 相关阅读:
    C# 应用程序性能监测器,很不错的工具
    C#接口(interface)与类(class)的实例互相转换深度解析
    异步与线程深度解析
    内存管理:程序是如何被优雅的装载到内存中
    MacBookM1通过DockerDesk安装MySQL8容器
    理解异步编程体系
    asp.net导入excel方法大集合
    无法激活服务,因为它不支持 ASP.NET 兼容性
    Oracle 数据库 在asp.net中 插入时间
    微软发布更新包 修复SilverLight中的6个问题
  • 原文地址:https://www.cnblogs.com/walxt/p/12523576.html
Copyright © 2020-2023  润新知