交换两个链表条目

时间:2012-10-19 08:20:33

标签: java linked-list swap

我正在尝试在链表中插入2个数字。必须对该列表进行排序,以便在较大的数字之前插入较小的数字。

列表首先添加更大的数字,然后当插入第二个更小的数字时,它必须用更小的数字交换。

我创建此方法只是为了做到这一点,此代码中的问题是它首先添加更大的数字,然后是更小的数字,然后再次增加更大的数字。

我做错了什么?

public void insertFirst(int id, double dd)
{         
    if (isEmpty())
    {
        Link newLink = new Link(id, dd);
        newLink.next = first;
        first = newLink;
    }
    else
    {
        if (first.iData < id)
        {
            Link newLink = new Link(id, dd);
            newLink.next = first;
            first = newLink;
        }
        else
        {
            int iTempData = first.iData;
            double dTempData = first.dData;

            Link newLink = new Link(id, dd);
            newLink.next = first;
            first = newLink;

            Link newLink2 = new Link(iTempData, dTempData);
            newLink2.next = first;
            first = newLink2;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

快速修复

public void insertFirst(int id, double dd)
{         
    if (isEmpty())
    {
        Link newLink = new Link(id, dd);
        newLink.next = first;
        first = newLink;
    }
    else
    {
        if (first.iData < id)
        {
            Link newLink = new Link(id, dd);
            newLink.next = first;
            first = newLink;
        }
        else
        {
            int iTempData = first.iData;
            double dTempData = first.dData;

            first.iData = id; // replace first
            first.dData = dd; // (do not add new)

            Link newLink2 = new Link(iTempData, dTempData);
            newLink2.next = first;
            first = newLink2;
        }
    }
}

请注意,此函数实际上并未对列表进行排序 - 它可以将新项目添加为第一个或第二个,但如果传递的ID大于列表中已有的所有(例如十个)项目,该怎么办? ?