C++程序 旋转双向链表N个节点
给定一个双向链表,将该链表逆时针旋转N个节点,其中N是一个给定的正整数,且小于链表中节点的数目。
N=2
旋转后的链表:
举例:
为了旋转双向链表,我们需要改变第N个节点的next指针为NULL,最后一个节点的next指针为之前的头节点,头节点的prev指针指向最后一个节点,并将头节点指向第(N+1)个节点,新头节点的prev指针改为NULL(在双向链表中头节点的prev指针为NULL)。
因此我们需要获取三个节点的指针:第N个节点,第(N+1)个节点和最后一个节点。从链表开始遍历,直到到达第N个节点时停止遍历。存储Nth节点的指针。我们可以使用NthNode->next获取第(N+1)个节点。一直遍历直到末尾并存储最后一个节点的指针。最后,按照上述方式改变指针,最后使用PrintList函数打印旋转后的链表。
输出:
时间复杂度: O(N)(N是链表节点的数量)
辅助空间: O(N)