java - 写一个“在双链表里在指定结点前插入结点”的函数,传参传什么?
巴扎黑
巴扎黑 2017-04-18 09:49:25
[Java讨论组]
public class DoubleLinked<Item>{
    private Node<Item> first; 
    private Node<Item> last; 
    private int n; 

    private static class Node<Item> {
        private Node<Item> previous;
        private Item item;
        private Node<Item> next;
    }
//忽略基本的代码...
//插入某个结点前结点
//问题就在这里
public void insertBefore(? ?){
    //插入操作等等....
} 
}

在insertBefore函数参数类型我不知道该如何定义。我认为可以传3种参数(如果有更好的思路请告诉我):

  • Item。也就是节点的内容,那么就是去遍历一个链表然后找到有这个内容的节点。但是如果有相同的内容就有点蛋疼了。

  • Int。结点的所在坐标,然后next下去找到这个节点去插入。

  • Node。似乎难以实现...没什么思路。

刚开始学数据结构方面的知识,如果问的问题过于傻x还请各位大大包涵。
__

更新,并且邀请诸位,原因:

  1. 在java的板块中经常能看到@manong的身影,大多数答案也令人信服。凭这点,我是愿意相信他的。

  2. @神不为者人为之 说的有理有据。引起了我的思考。

  3. 但是我认为我是个菜鸟,所以不敢妄下结论。邀请各位来希望能给个正确姿势,因为现在唯一的两个答案完全是两个分歧..

巴扎黑
巴扎黑

全部回复(2)
PHP中文网

你到底是要插入还是删除?
如果是删除,就是Node的引用就可以了啊,下面是伪代码

public void deleteAfter(Node node) {
    Node next = node.next; // 这个是要删的节点
    node.next = next.next;
    next.next.prev = node;
}

如果是插入,也很简单

public void insertBefore(Node node, Node newNode) {
    node.prev.next = newNode;
    node.prev = newNode;
}
ringa_lee

正式回答一下。
Item和Int都可以,其实可以参考java.util.List的定义:

  boolean add(E e);
  void add(int index, E element);

但是不能是Node,Node只是你内部定义的私有类,调用者无需知道这个类。
调用者不知道位置时候,InsertBefore只能遍历所有元素,找到对应的元素,插入到前面。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号