反复反转单个链表
发布于 2021-01-30 16:21:57
必须是O(n)并且是就地(空间复杂度为1)。下面的代码可以工作,但是有没有更简单或更完善的方法?
public void invert() {
if (this.getHead() == null)
return;
if (this.getHead().getNext() == null)
return;
//this method should reverse the order of this linked list in O(n) time
Node<E> prevNode = this.getHead().getNext();
Node<E> nextNode = this.getHead().getNext().getNext();
prevNode.setNext(this.getHead());
this.getHead().setNext(nextNode);
nextNode = nextNode.getNext();
while (this.getHead().getNext() != null)
{
this.getHead().getNext().setNext(prevNode);
prevNode = this.getHead().getNext();
this.getHead().setNext(nextNode);
if (nextNode != null)
nextNode = nextNode.getNext();
}
this.head = prevNode;
}
关注者
0
被浏览
133
1 个回答
-
编辑以删除每次迭代的额外比较:
public void invert() { Node<E> prev = null, next = null;; if (head == null) return; while (true) { next = head.getNext(); head.setNext(prev); prev = head; if (next == null) return; head = next; } }
推荐阅读
-
反转链表
2022-03-03 关注 0 浏览41 1答案
-
反转链表
2021-10-21 关注 0 浏览80 1答案
-
链表反转
2022-03-03 关注 0 浏览28 1答案
-
如下代码是实现反转链表的一部分代码:反转链表为:输入一个链表的头节点,反转...
2022-03-02 关注 0 浏览39 1答案
-
如何反转单链表
2020-01-28 关注 0 浏览444 1答案
-
请你手写链表反转
2020-01-30 关注 0 浏览412 1答案
-
手写代码:反转链表
2020-01-30 关注 0 浏览371 1答案
-
单向链表的反转
2021-10-21 关注 0 浏览159 1答案
-
反转python中的链表
2021-01-29 关注 0 浏览78 1答案
-
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链...
2022-03-02 关注 0 浏览64 1答案