首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按值添加节点

按值添加节点
EN

Stack Overflow用户
提问于 2019-05-15 02:39:30
回答 1查看 35关注 0票数 1

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

我尝试递增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);
        }
    }

补充add at end/front方法--它们工作得很好

        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;                                 
        }
    }

这些值应该按顺序添加,但除非输入新的min/maxs作为值,否则输出会将它们放在链表的最末尾。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 03:00:38

首先,我假设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;
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56136619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档