这是我的简单链表列表程序,它创建一个双向链表,它起作用。反向双向链表
#include <iostream>
using namespace std;
typedef struct node {
int data;
node *next;
node *prev;
}node;
void printList(node *temp);
int main()
{
node *head;
head = new node;
head->prev = NULL;
node *next = head;
node *prev = head;
node *temp = head;
node *current = head;
//creates 100 nodes, last one points to next
for(int x = 0; x<100; x++)
{
temp->data = x;
current = temp;
temp = new node;
current->next = temp;
temp->prev = current;
temp->next = NULL;
}
//=========================================
printList(head);
//=========== set everything to head ===========
current = head;
prev = head;
//============= reverses linked list ============
while(current->next != NULL)
{
next = current->next; //moves next pointer to next node
current->prev = next; //points current's previous to next node
current = next; //set current pointer to next node
current->next = prev; //set current's next to previous node
prev = current; //move prev node up to current
}
//================================================
printList(head);
cout<<"done";
return 0;
}
void printList(node *temp)
{
while(temp->next != NULL)
{
cout<<temp->data<<'\n';
temp = temp->next;
}
}
虽然我添加了反转功能,但它挂起。实际上,函数本身是有效的,但是在IDE中,当我打开它时,它会打印出所有的值,然后挂起(在闪烁的光标处),不执行任何操作。
解决方案:明白了。这是我的功能最终成为。
current = head; //set current pointer to head
prev = head; //set previous pointer to head
next = current->next; //moves next pointer to next node
current->next = NULL; //set the next of the header to NULL, because it will actually be the last
//node of reversed list.
current->prev = next; //set previous of the header to the next node.
while(next != NULL)
{
current = next;
next = current->next;
current->prev = next;
current->next = prev;
prev = current;
}
您是否在代码中的每个有趣的点处插入了打印语句并追踪了会发生什么?由于您使用的是IDE,您是否已经逐步了解了代码,并确定了代码中IDE“刚挂起”的位置。无论如何,“挂起”意味着什么? – GreenAsJade
我继续向反向功能添加打印语句。这就是我得到的。有任何想法吗? http://ideone.com/nvDNK2 –