這是我的簡單鏈表列表程序,它創建一個雙向鏈表,它起作用。反向雙向鏈表
#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 –