RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1609062
Accepted
1843
1843
Asked:2025-03-21 10:09:27 +0000 UTC2025-03-21 10:09:27 +0000 UTC 2025-03-21 10:09:27 +0000 UTC

创建 AddAfter 和 Addbefore 方法

  • 772

DoublyLinkedList给出了用于处理双向链表的类。有必要落实其中的方法AddAfter和措施AddBefore。从我所理解的一切来看,它应该基于方法Add,但我不明白要用什么来补充它,除了LinkedListNode<T> node- 在什么之前或之后,以及T value- 添加。

以防万一:

public class DoublyNode<T>
{
    public DoublyNode(T data)
    {
        Data = data;
    }
    public T Data { get; set; }
    public DoublyNode<T> Previous { get; set; }
    public DoublyNode<T> Next { get; set; }
}

public class DoublyLinkedList<T> : IEnumerable<T>  // двусвязный список
{
    DoublyNode<T> head; // головной/первый элемент
    DoublyNode<T> tail; // последний/хвостовой элемент
    int count;  // количество элементов в списке

    // добавление элемента
    public void Add(T data)
    {
        DoublyNode<T> node = new DoublyNode<T>(data);

        if (head == null)
            head = node;
        else
        {
            tail.Next = node;
            node.Previous = tail;
        }
        tail = node;
        count++;
    }
    public void AddFirst(T data)
    {
        DoublyNode<T> node = new DoublyNode<T>(data);
        DoublyNode<T> temp = head;
        node.Next = temp;
        head = node;
        if (count == 0)
            tail = head;
        else
            temp.Previous = node;
        count++;
    }
    public void AddLast(T data)
    {
        DoublyNode<T> node = new DoublyNode<T>(data);
        DoublyNode<T> temp = tail;
        node.Previous = temp;
        tail = node;
        if (count == 0)
            head = tail;
        else
            temp.Next = node;
        count++;
    }

    public void AddAfter(LinkedListNode<T> node, T value) 
    { 
    
    }
    public void AddBefore(LinkedListNode<T> node, T value) 
    {
    
    }  
}
c#
  • 2 2 个回答
  • 64 Views

2 个回答

  • Voted
  1. CrazyElf
    2025-03-21T11:47:45Z2025-03-21T11:47:45Z

    这里一切都是纯粹合乎逻辑的:

    AddAfter - 您需要使参数指定的元素指向您将从值创建的新节点作为下一个节点,并且这个新节点指向参数中的这个元素作为前一个节点,以及下一个节点 - 这是这个参数的下一个节点。

    那些。:

    node <-> newNode <-> nextNode
    

    AddBefore - 类似,但新节点位于指定元素之前:

    previousNode <-> newNode <-> node
    

    你只需要拿起来并仔细地去做,你的代码中已经有足够的例子了。

    可以这么说,“大局”:

     head ... previousNode <-> node <-> nextNode ... tail
    ^                       ^        ^                   ^
    |AddFirst      AddBefore|        |AddAfter    AddLast|
    

    我们还需要记住处理“边缘情况”——例如,当节点是第一个或最后一个时。顺便说一下,最简单的方法是立即检查并调用针对这些情况已有的现成函数。

    • 3
  2. Best Answer
    1843
    2025-03-26T12:58:32Z2025-03-26T12:58:32Z

    找到了一种破解课程LinkedList并监视解决方案的方法。给定的代码已被修改以满足我的要求。

    public void AddAfter(DoublyNode<T> node, T value) 
    {
        DoublyNode<T> list = new DoublyNode<T>(value); //добавляем элемент в переменную
        DoublyNode<T> next = node;
        if (count == 0)
        {
            head = list;
            tail = list;
        }
        else
        {
            if (node != tail)
            {
                list.Previous = next;//устанавливаем предыдущий узел на узел, после которого мы добавляем новый 
                list.Next = next.Next;// устанавливаем следующий узел 
                next.Next.Previous = list;//обновляем предыдущий указатель следующего узла (то есть узла, который был после next), чтобы он указывал на новый узел list.
                next.Next = list;//новый узел между next и next.Next
            }
            else
            {
                tail = list; //обновляем хвост списка
                list.Previous = next; //следующим становится "добавляемый"
                list.Next = null;
                next.Next = list; //у добавляемого предыдущем стал тот, что был псоледним
            }
        }
        count++;
    }
    public void AddBefore(DoublyNode<T> node, T value) 
    {
        {
            DoublyNode<T> list = new DoublyNode<T>(value); //добавляем элемент в переменную
            DoublyNode<T> next = node;
            if (count == 0)
            {
                head = list;
                tail = list;
            }
            else
            {
                if (node != head)
                {
                    list.Next = next;//list будет следовать за узлом next в списке
                    list.Previous = next.Previous;//list будет ссылаться на узел, который предшествует next
                    next.Previous.Next = list;//связывает предыдущий узел с новым узлом, который мы добавляем
                    next.Previous = list;//next с новым узлом, который теперь находится перед ним.
                }
                else
                {
                    head = list; //добавляемый встал на место первого
                    list.Next = next; //следующим становится "первый"
                    list.Previous = null;
                    next.Previous = list; //у "следующего" предыдущем стал добавляемый
                }
            }
            count++;
        }
    }
    
    • 0

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5