• 每日一题 为了工作 2020 0318 第十六题


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

    * 代码

    public class Node<T>{
    	public T value;
    	public Node next;
    	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;
    	        //将头节点和当前节点重新赋值
    	        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();
    	}
    }
    

    *运行结果

  • 相关阅读:
    【LeetCode】1668.最大重复子字符串(三)
    【LeetCode】1929. 数组串联(4)——总结
    验证下MarkDown
    【LeetCode】27. 移除元素
    [Linux]cp command in Linux with examples
    【LeetCode】1929. 数组串联(2)
    【LeetCode】1668.最大重复子字符串(二)
    RAID6与RAID5区别
    【PyCharm/IntelliJ】How to solve "untrusted server's certificate"
    【JAVA】The difference between JDK and JRE
  • 原文地址:https://www.cnblogs.com/walxt/p/12516778.html
Copyright © 2020-2023  润新知