zoukankan      html  css  js  c++  java
  • 每日一题 为了工作 2020 0316 第十四题

    /**
    *
    *问题:删除链表的中间节点
    * 给定链表的头节点head, 实现删除链表的中间节点的函数。
    *
    *分析:
    * 不删除任何节点;
    * 1->2, 删除节点1;
    * 1->2->3, 删除节点2;
    * 1->2->3->4, 删除节点2:
    * 1->2->3->4->5, 删除节点3;
    *
    * 如果链表为空或者长度为1, 不需要调整, 则直接返回;
    * 如果链表的长度为2, 将头节点删除即可;
    * 当链表长度到达3, 应该删除第2个节点; 当链表长度为4, 应该删除第2个节点;
    * 当链表长度为5, 应该删除第3个节点……
    *
    *结论:
    * 也就是链表长度每增加2(3,5,7 ...), 要删除的节点就后移一个节点, 如果要删除一个节点, 则需要找到待删除节点的前一个节点。
    * @author 雪瞳
    *
    */

    public class Node<T> {
        public T value;
        public Node<T> next;
        public Node(T data){
            this.value = data;
        }
    }
    public class DeleteCenterNode {
    	
    		private Node pre;
    		private Node cur;
    	public Node deleteCenterNode(Node head) {
    		//链表为空或长度为 1 直接返回
    		if(head==null && head.next==null) {
    			return head;
    		}
    		//链表长度为2 删除头结点
    		if(head.next.next == null) {
    			head  = head.next;
    			return head;
    		}
    		//链表长度大于3
    		pre = head;
    		cur = head.next.next;
    		//从头结点开始遍历 就由于每长度每增加 2就会导致删除结点后移一个结点,所以只要遍历的尾部结点无法达到增加2的情况
    		//当前pre结点的下一结点就是需要删除的结点
    		while(cur.next !=null && cur.next.next !=null) {
    			pre = pre.next;
    			cur = cur.next.next;
    		}
    		//移除pre的下一个结点
    		pre.next = pre.next.next;
    		return head;
    		
    	}
    }
    

      

    import java.util.Random;
    import java.util.Scanner;
    
    public class testDeleteCenterNode {
        public static void main(String[] args) {
            DeleteCenterNode delete = new DeleteCenterNode();
            testDeleteCenterNode test = new testDeleteCenterNode();
            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);
            delete.deleteCenterNode(head);
            test.showNode(head);
            
        }
        public void showNode(Node head) {
            System.out.println("链表内的元素如下所示...");
            while(head != null) {
                System.out.print(head.value+"	");
                head = head.next;
            }
            System.out.println();
        }
    }

    /*运行结果

     

  • 相关阅读:
    Liferay 6.2 改造系列之一:源码编译和服务启动
    安装Maven、Eclipse设置、添加地址JAR
    HTTP状态码查询
    Android Manifest 权限描述大全
    Bootstrap Table 表格参数详解
    Maven项目在Eclipse中调试 Debug
    J2EE中使用jstl报http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar错
    在Eclipse中导入SVN库里的Maven项目
    手机最后一位居然代表你的婚姻爱情
    老九门1-48(全集)
  • 原文地址:https://www.cnblogs.com/walxt/p/12503179.html
Copyright © 2011-2022 走看看