您的位置:首页 > 理论基础 > 数据结构算法

数据结构-6

2016-02-26 16:08 495 查看
//单链表的倒置

#include <stdio.h>

#include <stdlib.h>

typedef struct Node

{

int data;//数据域

struct Node * pNext;//指针域

}NODE,*PNODE;//NODE相当于struct Node,PNODE相当于struct Node *

//函数声明

void Reverse_list(PNODE pHead);

void traverse_list(PNODE pHead);

PNODE create_list(void);

int main(void)

{

PNODE pHead = NULL;//等价于 struct Node * pHead = NULL;

pHead = create_list();//creat_list()功能,创建一个非循环单链表,并将该链表的首地址赋值给pHead

Reverse_list(pHead);

traverse_list(pHead);

return 0;

}

PNODE create_list(void)

{

int len;

int i;

int val;

PNODE pHead = (PNODE)malloc(sizeof(NODE));

if(NULL == pHead)

{

printf("分配失败,程序终止!\n");

exit(-1);

}

PNODE pTail = pHead;

pTail->pNext = NULL;

printf("请输入您需要生成的链表节点的个数:len= ");

scanf("%d",&len);

for(i=0;i<len;++i)

{

printf("请输入第%d个节点的值:",i+1);

scanf("%d",&val);

PNODE pNew = (PNODE)malloc(sizeof(NODE));

if(NULL == pHead)

{

printf("分配失败,程序终止!\n");

exit(-1);

}

pNew->data = val;

pTail->pNext = pNew;

pNew->pNext = NULL;

pTail = pNew;

}

return pHead;

}

void Reverse_list(PNODE pHead)

{

PNODE p=pHead;

PNODE prev=p->pNext;

PNODE cur=prev->pNext;

PNODE next=NULL;

while(cur!=NULL)

{

next=cur->pNext;

cur->pNext=prev;

prev=cur;

cur=next;

next=NULL;

}

p->pNext->pNext=NULL;

pHead->pNext=prev;

}

void traverse_list(PNODE pHead)

{

PNODE p = pHead->pNext;

while(NULL !=p)

{

printf("%d ",p->data);

p=p->pNext;

}

printf("\n");

return;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: