[英]Doubly Linked List
我一直在试图弄清楚如何反转双向链接列表的顺序。我最近在hackerrank上建立了帐户,这是我的第十个问题。 我花了1个小时才弄清楚解决方案(我用笔和纸试了好多次),最后还是以正确的方式通过了。 之后,我看到其他人提交了一些答案,与我的代码相比,他们的代码长度很小,或者您认为我的答案还可以。 我没有人要问,所以我来到这里。 (如果您认为这是一个愚蠢的问题,请原谅我)
Node Reverse(Node head) {
Node prevNode = null;
Node NextNode = null;
Node m = head;
Node upComingNode = null;
Node temp = head;
if(head == null){
return head;
}
else{
while(temp!=null){
NextNode = temp.next;
temp.next = prevNode;
m.prev = upComingNode;
prevNode = temp;
upComingNode = prevNode.next;
m = temp;
temp = NextNode;
}
head = prevNode;
}
return head;
}
我不确定您使用的是哪种语言,但是简单地说,要反转双向链表,您想为每个节点交换下一个和上一个节点。 这可以很快完成,伪代码如下:
while(currNode != tail){
currNode.nextNode = tempNode
currNode.nextNode = currNode.prevNode
currNode.prevNode = tempNode
currNode = currNode.prevNode
}
请注意,我们将下一个节点设置为作为上一个节点进行迭代,因为在进行切换后,上一个节点实际上指向下一个节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.