zoukankan      html  css  js  c++  java
  • 算法-第四版-练习1.3.20解答

    问题

    编写一个方法delete(),接受一个int参数k,删除链表的第k个元素(如果它存在的话)。

    解决思路

    为删除第k个元素,需查找到第k-1个元素,然后进行删除。

    特殊处理,参数<=0和大小链表length的情况,直接返回。删除第1个元素同样需要特殊处理,直接让头结点引用下一个结点。

    代码

       
        public void delete(int k)
        {
            // deal with k <= 0, list is empty
            if (k <= 0 || first == null) return;
            // deal with first node
            if (k == 1) 
            {
                first = first.next;
                return;
            }
            
            // make current equals k-1 node
            k--;
            Node current = first;
            while (current != null && --k != 0)
            {
                current = current.next;
            }
            // list length less than k
            if (k != 0 || current == null || current.next == null)
            {
                return;
            }
            else
            {
                current.next = current.next.next;
            }
        }


    测试:

    /**
     * Description : 
     * Author      : mn@furzoom.com
     * Date        : Oct 24, 2016 4:30:01 PM
     * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
     */
    package com.furzoom.lab.algs.ch103;
    
    /**
     * ClassName    : E10320 <br>
     * Function     : TODO ADD FUNCTION. <br>
     * date         : Oct 24, 2016 4:30:01 PM <br>
     * 
     * @version 
     */
    public class E10320
    {
        public static void main(String[] args)
        {
            LinkList<String> ll = new LinkList<String>();
            ll.append("a");
            ll.append("B");
            ll.append("c");
            ll.append("D");
            ll.append("e");
            
            LinkList.printList(ll);
            System.out.println("delete node at 0");
            ll.delete(0);
            LinkList.printList(ll);
            
            System.out.println("delete node at 5");
            ll.delete(5);
            LinkList.printList(ll);
            
            System.out.println("delete node at 4");
            ll.delete(4);
            LinkList.printList(ll);
            
            System.out.println("delete node at 1");
            ll.delete(1);
            LinkList.printList(ll);
        }
    }
    


    算法-第四版-1.3 背包、队列和栈-习题索引汇总

    算法-第四版习题索引汇总


  • 相关阅读:
    面试题39:二叉树的深度、判断二叉树是不是平衡
    Bridge 桥接
    Adapter 适配器
    search_request.go
    scoring_criteria.go
    index_init_oprions.go
    index.go
    engine_init_options.go
    document_index_data.go
    util.go
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710182.html
Copyright © 2011-2022 走看看