算法-第四版-练习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);
}
}
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。

浙公网安备 33010602011771号