编写算法逆置一个带头结点的双链表
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct DNode
{
int data;
struct DNode* prev;
struct DNode* next;
}DNode;
DNode* createDNode(int data)
{
DNode* newNode = (DNode*)malloc(sizeof(DNode));
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
void insertDNode(DNode*& head, int data)
{
DNode* newNode = createDNode(data);
if (head->next== NULL)
{
head->next = newNode;
return;
}
else
{
DNode* temp = head;
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
}
void PrintDList(DNode* head)
{
DNode* temp = head;
while (temp ->next!= NULL)
{
printf("%d\t", temp->next->data);
temp = temp->next;
}
printf("\n");
}
void reverseDList(DNode* head)
{
if (head->next == NULL||head->next->next==NULL)
{
return;
}
DNode* current = head->next;
DNode* temp = NULL;
current->prev = NULL;
temp = current->next;
current->next = NULL;
DNode* temp2;
while (temp!=NULL)
{
temp2 = temp->next;
current->prev = temp;
temp->next = current;
current = temp;
temp = temp2;
}
current->prev = head;
head->next = current;
}
int main(int argc, char* argv[])
{
DNode* head =new DNode;
head->prev = NULL;
head->next = NULL;
insertDNode(head, 1);
insertDNode(head, 2);
insertDNode(head, 3);
insertDNode(head, 4);
printf("原双链表为:");
PrintDList(head);
reverseDList(head);
printf("逆置后双链表为:");
PrintDList(head);
return 0;
}
![运行结果](https://img-blog.csdnimg.cn/direct/2b640e6702fc4143b61db17275878089.png#pic_center)