当前位置: 首页 > 面试题库 >

在恒定时间内将节点插入链表?

盖锦程
2023-03-14
问题内容

我正在做一个作业,告诉我假设我有一个带有标题和尾部节点的单链接列表。它要我在位置p之前插入项目y。有人可以查看我的代码并告诉我我是否走对了吗?如果没有,您能为我提供任何提示或指示(无双关语)吗?

tmp = new Node();
tmp.element = p.element;
tmp.next = p.next;
p.element = y;
p.next = tmp;

我认为我可能是错的,因为即使在问题描述中特别提到了头和尾节点,我也根本不使用头和尾节点。我正在考虑编写一个while循环来遍历列表,直到找到p并以这种方式解决问题,但这不是固定时间的,对吗?


问题答案:

如果遇到问题,只需写下来即可:

// First we have a pointer to a node containing element (elm) 
// with possible a next element.
// Graphically drawn as:
// p -> [elm] -> ???

tmp = new Node();
// A new node is created. Variable tmp points to the new node which 
// currently has no value.
// p   -> [elm] -> ???
// tmp -> [?]

tmp.element = p.element;

// The new node now has the same element as the original.
// p   -> [elm] -> ???
// tmp -> [elm]

tmp.next = p.next;

// The new node now has the same next node as the original.
// p   -> [elm] -> ???
// tmp -> [elm] -> ???

p.element = y;

// The original node now contains the element y.
// p   -> [y] -> ???
// tmp -> [elm] -> ???

p.next = tmp;

// The new node is now the next node from the following.
// p   -> [y] -> [elm] -> ???
// tmp -> [elm] -> ???

您已达到要求的效果,但是它可以提高效率,我敢打赌,您现在就可以了解自己。

写这样的东西更清晰:

tmp = new Node();
tmp.element = y;
tmp.next = p;
p = tmp;

如果p不可变,那当然不起作用。但是,如果p == NULL,则您的算法将失败。

但是我要说的是,如果您对算法有疑问,只需写下效果即可。尤其是对于树和链表,您需要确保所有指针都指向严格的方向,否则会造成混乱。



 类似资料:
  • 我在做一个程序,没有使用Java的内置链表类;我在从头开始做。除了编写一个将节点插入链表的特定位置的方法外,我在所有方面都取得了成功。 我有一个方法将一个特定的节点设置为“当前”节点。所以,例如,我有一个链表,看起来是这样的:猫-->狗-->使-->好-->宠物,“当前”等于2;这意味着“当前”节点是“狗”。 从这里开始,假设我想在“current”的位置插入一个新节点,它的info字段为AND。

  • 我尝试实现循环链表的insert方法。我想我取得了一些成功。 问题:当我显示列表时。display方法将循环,因为链接的每个next变量都链接到一个非Null节点对象。所以head永远不会是空对象。根据我对单链表的回忆,head总是指向列表中的第一个节点或其中包含数据的第一个节点。 我对循环链表的概念理解:根据我的理解,循环链表有点像一个单链表,但有一点小的变化:尾部对象的下一个变量指向头部。 来

  • 我试图学习在链表中插入一个节点(并返回头部),但由于某种原因,它是不正确的。 这是我的方法: 1.使用所需数据创建新节点 2.如果我们想在开头插入它,将这个新节点指向头部并返回新节点 3.否则,循环到要插入节点的位置 -到达后,将要插入的节点指向当前节点的下一个节点 -将当前节点指向要插入的节点 -把脑袋还给我 为什么这不起作用?非常感谢!

  • 该方法不起作用: 另一种有效的添加方法: 要调试的打印方法: DoublyLinkedList类: LinkedList和Node的实现非常简单,https://www.geeksforgeeks.org/doubly-linked-list/ 我首先创建一个link列表,insert_front()一个值来使头不为空,然后使用上面的方法插入其他东西。插入节点后的前端、结尾,但是,这个insert

  • 我正在尝试创建一个函数,用于在双链接列表的末尾添加。我无法精确指出为什么它没有打印出任何内容。 当我构建程序时,没有出现错误。 我正在确定。新建节点首先检查头部是否有任何值 在上一个当前指针之后创建 我将前一个节点连接到新节点,新节点指向前一个节点,而新节点指向nullptr作为下一个节点。

  • 我试图编写一个方法来插入一个节点和移除链表后面的一个节点。下面是我在其中编写方法的主类。它们在底部(insertBack和removeBack): 可能有格式错误,因为我粘贴到这里,但我仍然试图找出如何使用这个网站。当我运行如下所示的驱动程序类时,我会得到如下所示的结果。 有人能帮我弄清楚为什么我的removeFront和removeBack方法不起作用吗?