【问题标题】:Swapping two linked list entries交换两个链表条目
【发布时间】:2012-10-19 08:20:33
【问题描述】:

我正在尝试将 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;
        }
    }
}

【问题讨论】:

  • 最好给出定义isEmpty()first的代码..

标签: java linked-list swap


【解决方案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 大于列表中已经存在的所有(比如十个)项目怎么办?

【讨论】:

  • 我明白你的意思。我只想知道如何为 2 个数字执行此操作。接下来,我必须创建一个循环来遍历所有条目。
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多