链表以前一直没有自己手写过,发现程序这个东西,一定的自己动手练习,才会掌握的比较牢固。所以今天就自己动手写了双向链表的建立和反序。记录一下
#include <stdio.h>
#include <malloc.h>
typedef struct _node
{
int data;
struct _node *pre;
struct _node *next;
}Node,*pNode;
pNode head = NULL;
void creatHead()
{
int temp;
pNode pnode;
if(head == NULL)
{
pnode = (Node *)malloc(sizeof(Node));
pnode->data = 100;
pnode->pre = NULL;
pnode->next = NULL;
head = pnode;
}
for(temp = 0;temp < 5;temp++)
{
pNode tempnode = (Node *)malloc(sizeof(Node));
tempnode->data = temp;
tempnode->pre = pnode;
tempnode->next = NULL;
pnode->next = tempnode;
pnode = tempnode;
}
}
void fanzhuan(pNode headnode)
{
pNode prenode = NULL;
pNode pnext = NULL;
pNode pnode = headnode;
while(pnode)
{
pnext = pnode->next;
if(pnext == NULL)
{
head = pnode;
pnode->pre = NULL;
}
pnode->next = prenode;
pnode->pre = pnext;
prenode = pnode;
pnode = pnext;
}
}
void printnode(pNode headnode)
{
pNode pnode;
pnode = headnode;
while(pnode)
{
printf("node data=%d\n",pnode->data);
pnode = pnode->next;
}
}
void main()
{
creatHead();
printnode(head);
fanzhuan(head);
printnode(head);
}