[英]Reversing Portions of a Doubly Linked Linked (c++)
我正在尝试纠正一种方法来反转双向链表。
template <class T>
void List<T>::reverse() {
reverse(head_, tail_);
}
template <class T>
void List<T>::reverse(ListNode*& startPoint, ListNode*& endPoint) {
if(startPoint == NULL || endPoint == NULL) return;
ListNode* currPoint = *&startPoint;
ListNode* end = endPoint->next;
while(currPoint != end ) {
ListNode* tmp = currPoint->next;
currPoint->next = currPoint->prev;
currPoint->prev = tmp;
if(tmp == end) {
endPoint = startPoint;
startPoint = currPoint;
}
currPoint = tmp;
}
}
因此, head_
和tail_
是指向DLL开头和结尾的指针。 倒车列表的实际过程应该是相当简单-扭转prev
和next
指针序列中的每ListNode。
如您所见,我正在尝试使其能够使第二种方法可以反转DLL的任何子部分。 我将在其他方法中使用第二种方法,但是目前,我的唯一目标是使其能够用于反转整个列表。 我认为最大的问题是head_
没有得到适当的更新,因为在我打印列表时什么都没有。
当我打印基本测试时,它仅显示:
Expected: < 9 8 7 6 5 4 3 2 1 0 >
Actual: < >
一个实现在实际输出中显示了“ 9”,但是我可以肯定的是,因为列表的第一部分只是被扔掉了。
您可以将问题简化为三个步骤:
这条路
[prev] startpoint ... endpoint [nxt]
[prev] (nullptr) startpoint... endpoint (nullptr) [nxt]
[prev] (nullptr) reverse(startpoint...endpoint) (nullptr) [nxt]
[prev] begin(reversed-sublist) ...end(reversed-sublist) [nxt]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.