资源描述
// 单链表逆置.c
#include <stdio.h>
#include <stdlib.h>
#define LINK_LENGTH 15
typedef struct _Node
{
int data;
struct _Node *next;
}Node, *NodePtr;
void PrintLinklist(NodePtr pHead);
NodePtr CreateLinklist(NodePtr pHead)
{
NodePtr pPrev, pCurr;
pCurr = (NodePtr)malloc(sizeof(Node));
pCurr->data = 0;
pCurr->next = NULL;
pHead = pCurr;
int i = 0;
pPrev = pCurr;
for( i ; i < LINK_LENGTH - 1; i++)
{
pCurr = (NodePtr)malloc(sizeof(Node));
pCurr->data = i + 1;
//printf("****** %d ******\n",pCurr->data);
pCurr->next = NULL;
pPrev->next = pCurr;
pPrev = pCurr;
}
return pHead;
}
NodePtr ReverseLinklist(NodePtr pHead)
{
NodePtr pr = NULL, pc = pHead, pn = NULL;
//printf("head address:0x%x\n",pHead);
while(pc != NULL)
{
pn = pc->next;
pc->next = pr;
pr = pc;
pc = pn;
}
pHead = pr;
//printf("head address:0x%x\n",pHead);
return pHead;
}
void PrintLinklist(NodePtr pHead)
{
NodePtr pCurr = pHead;
//printf("head address:0x%x\n",pHead);
//printf("Linklist begin:\n");
while(pCurr != NULL)
{
printf("%d ", pCurr->data);
pCurr = pCurr->next;
}
//printf("\n********end.\n");
}
int main(void)
{
NodePtr pHead = NULL;
pHead = CreateLinklist(pHead);
printf("Original Linklist:\n");
PrintLinklist(pHead);
printf("\n");
// Reverse
pHead = ReverseLinklist(pHead);
printf("Reversed Linklist:\n");
PrintLinklist(pHead);
printf("\n");
return 0;
}
展开阅读全文