【问题标题】:Adding nodes by value按值添加节点
【发布时间】:2019-05-14 18:39:29
【问题描述】:

我正在尝试以排序方式将节点添加到我的链接列表中。如果值小于链表的末尾,我的代码只会不断添加到末尾。我不确定如何解决这个问题,或者我是否没有完全检查正确的场景。

我试图增加 current 直到它大于 nodeToAdd 来放置节点,但它总是把它放在最后。

        public void AddOrdered(int value)
    {
        LinkedListNode nodeToAdd = new LinkedListNode(value);
        LinkedListNode cur = m_first;
        if (m_first == null) 
            m_first = nodeToAdd;//new LinkedListNode(value);

        else if (nodeToAdd.m_data < m_first.m_data) 
        {
            AddAtFront(value);
        }
        else if (nodeToAdd.m_data < cur.m_next.m_data) 
        {
            LinkedListNode temp = new LinkedListNode(value);
            temp = m_first.m_next;
            m_first.m_next = nodeToAdd;
            nodeToAdd.m_next = temp;
        }
        else
        {
            AddAtEnd(value);
        }
    }

在末尾/前端添加补充方法——工作正常

        public void AddAtEnd(int value)
    {
        LinkedListNode cur = m_first;
        if (m_first == null)
        {
            LinkedListNode lnl = new LinkedListNode(value);
            m_first = lnl;
        }
        while (cur.m_next != null)
        {
            cur = cur.m_next;
        }
        cur.m_next = new LinkedListNode(value);
    }

        public void AddAtFront(int value)
    {
        if (m_first == null) 
        {
            LinkedListNode ln = new LinkedListNode(value);
            m_first = ln;
        }
        else
        {
            LinkedListNode lnl = new LinkedListNode(value); 
            lnl.m_next = m_first;                           
            m_first = lnl;                                 
        }
    }

值应该按顺序添加,但输出会将它们放在链表的最后,除非输入新的最小值/最大值作为值。

【问题讨论】:

    标签: c# linked-list nodes


    【解决方案1】:

    首先我假设 m_first 是您的第一个节点。以此为假设,代码如下:

    public void AddOrdered(int value)
        {
            LinkedListNode nodeToAdd = new LinkedListNode(value);
            LinkedListNode cur;
            if (m_first == null || m_first.data >= nodeToAdd.data)
            {
                nodeToAdd.next = m_first;
                m_first = nodeToAdd;
            }
            else
            {
                cur = m_first;
                while (cur.next != null &&
                cur.next.data < nodeToAdd.data)
                    cur = cur.next;
    
                nodeToAdd.next = cur.next;
                cur.next = nodeToAdd;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多