插入已排序的链表?

时间:2018-04-16 09:58:59

标签: c#

我对编码很陌生,我无法理解代码中的错误,我非常感谢您的帮助。

所以代码工作正常,除了最后一个元素,因为之后的元素为null,我无法处理它(我很新)。

问题在于最后一部分。

public static void InsertingIntoSortedLinkedList(int value, int key)
            {
                Node m = new Node();
                m.value=value;
                m.key=key;
                if (root==null)
                {
                    m.Next = null;
                    root = m;
                }
                else
                {
                    if (key<root.key)
                    {
                        m.Next = root;
                        root = m;
                    }
                    else
                    {
                        Node temp1 = root;
                        Node temp2 = null;
                        while ((temp1!=null)&&(temp1.key<key))
                        {
                            temp2 = temp1;
                            temp1 = temp1.Next;
                        }
                        if (temp1==null)
                        {
                            m.Next = null;
                            temp2.Next=m;
                        }
                        else
                        {
                            m.Next = temp1;
                            if (temp2!=null)//I either put this here and the last element is lost or I got a NullReferenceException. What should I change?
                            {
                                temp2.Next = m;

                            }
                        }
                    }
                }


}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可能发现问题的一种情况是当您插入等于根值的值时 - 将跳过这些值,因为您试图在匹配项之前插入而不更新根引用。

解决方案是在匹配值之后插入 - 这可以通过更改行

来完成
while ((temp1!=null)&&(temp1.key<key))

while ((temp1 != null) && (temp1.key <= key))

通过更改行

插入根元素
if (key<root.key)

if (key <= root.key)

之前插入时更新根值
if (temp2!=null)
{
  temp2.Next = m;
}
else
  root = m;

任何一项更改都应解决问题

答案 1 :(得分:-3)

你有两个拼写错误:

  1. if (key<root.key)

  2. while ((temp1!=null)&&(temp1.key<key))

  3. >

    结尾处遗漏<key