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