算法-第四版-练习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 背包、队列和栈-习题索引汇总

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


posted @ 2017-10-22 15:50  枫竹梦  阅读(250)  评论(0编辑  收藏  举报