zoukankan      html  css  js  c++  java
  • 【DataStructure】Some useful methods about linkedList.

    /**
    * Method 1: Delete the input element x 
    * and meanwhile keep the length of array after deleted n
    * @param a  the array
    * @param n  the length of array after deleted.
    * @param x  the element that need to be deleted. 

    */

    static void delete(int[] a, int n, int x) {
    		// preconditions: [0] <= ... <= a[n-1], and n <= a.length;
    		// postconditions: a[0] <= ... <= a[n-2], and x is deleted;
    		int i = 0; // find the first index i for which a[i] > x:
    		while (i < n && a[i] <= x) {
    			++i;
    		}
    		// shift {a[i],...,a[n-1]} into {a[i-1],...,a[n-2]}:
    		if (i < n - 1) {
    			System.arraycopy(a, i, a, i - 1, n - i);
    		}
    		a[n - 1] = 0;
    	}
    /**
    * Gets the number of nodes in the specified list;
    * Fox example, if list is {33,55,77,99}, the size(list) will be return 4;

    * @param list 
    * @return
    */
    static int size(Node list) {
    		int size = 0;
    		while (list != null) {
    			++ size;
    			list = list.next;
    		}
    		
    		return size;
    	}
    /**
    * Gets the sum of nodes in the specified list;
    * Fox example, if list is {33,55,77,99}, the size(list) will be return 254;
    * @param list
    * @return
    */
    static int sum(Node list){
    		int sum = 0;
    		while(list != null){
    			sum += list.data;
    			list = list.next;
    		}
    		
    		return sum;
    	}
    /**
    // precondition: the specified list has at least two nodes;
    // postcondition: the last node in the list has been deleted;
    For example, if list is {22, 44, 66, 88}, then removeLast(list)will change it to {22, 44,66}.
    * @param list
    */
    void removeLast(Node list){
    		if(list == null || list.next == null)
    		{
    			//throw new IllegalStatException();
    		}
    		//{33,55,77,99} 
    		
    		
    		while(list.next.next != null) {
    			list = list.next;
    		}
    		
    		list.next = null;
    	} 
    /**

    * @param list
    * @return
    */
    static Node copy(Node list)
    	{
    		if(list == null)
    		{
    			return null;
    		}
    		
    		Node clone = new Node(list.data);
    		for (Node p = list, q = clone; p != null; p = p.next, q = q.next)
    		{
    			q.next = p.next;
    		}
    		
    		return clone;
    	}
    	
    /**
    * Get a new list that contains copies of the p-q nodes of the specified list, 
    * starting with node number p(starting with 0).
    * For example, if listis {22, 33, 44, 55, 66, 77, 88, 99}, then sublist(list, 2, 7)will
    * return the new list {44, 55, 66, 77, 88}. Note that the two lists must be completely independent of each other.
    * Changing one list should have no effect upon the other.
    * @param list
    * @param m
    * @param n
    * @return
    */
    Node sublist(Node list, int m, int n) {
    		if (m < 0 || n < m) {
    			throw new IllegalArgumentException();
    		} else if (n == m) {
    			return null;
    		}
    		
    		//55,22,11,33
    		for (int i = 0; i < m; i++) {
    			list = list.next;
    		}
    		Node clone = new Node(list.data);
    		Node p = list, q = clone;
    		for (int i = m + 1; i < n; i++) {
    			if (p.next == null) {
    				throw new IllegalArgumentException();
    			}
    			q.next = new Node(p.next.data);
    			p = p.next;
    			q = q.next;
    		}
    		return clone;
    	}

  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6755033.html
Copyright © 2011-2022 走看看