链表的创建 链表的建立
链表的创建
# include
# include
# include
typedef struct Node
{
int data
struct Node * pNext
}NODE,* PNODE
PNODE create_list(void)//创建一个链表
void traverse_list(PNODE pHead)//遍历链表
int main(void)
{
PNODE pHead = NULL
printf("创建链表:
")
pHead = create_list()
printf("遍历链表:
")
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("分配内存失败!程序终止!")
exit(-1)
}
PNODE pTail = pHead
pTail->pNext = NULL
printf("请输入要创建的链表中节点的个数len=")
scanf("%d",&len)
for (i=0i
printf("请输入第%d个节点的有效数据:",i 1)
scanf("%d",&val)
PNODE pNew = (PNODE)malloc(sizeof(NODE))
if (NULL == pNew)
{
printf("分配内存失败!程序终止!")
exit(-1)
}
pNew->data = val
pTail->pNext = pNew
pNew->pNext = NULL
pTail = pNew
}
return pHead
}
void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext
while (NULL != p)
{
printf("d",p->data)
p = p->pNext
}
printf("
")
return
}
/*
在vc 6.0中的输出结果:
-----------
创建链表:
请输入要创建的链表中节点的个数len=请输入第1个节点的有效数据:请输入第2个节点的有效数据:请输入第3个节点的有效数据:遍历链表:
1 2 -----------------
*/
供你参考@ 呵呵
链表的建立
//c语言实现链表的建立,按逆序复制
#include#include struct node { int info//节点信息 struct node *next } struct node *Create(int *numnode) {//创建一个链表 struct node *head,*tail,*cnew head=NULL int num printf("输入数据(以零结束):") while(1) { scanf("%d",&num) if(num==0)//输入为零表示输入结束 break cnew=(struct node*)malloc(sizeof(struct node)) cnew->info=num cnew->next=NULL if(head==NULL)//若为空则将头节点指向新节点 head=cnew else tail->next=cnew//将当前节点的next指向新的节点 tail=cnew (*numnode) } return head } struct node *ReverseCopy(struct node *head1,int *numnode) {//复制链表函数反向复制 struct node *p,*head,*q head=NULL//初始化为空 for(q=head1q!=NULLq=q->next) {//根据head1链表来建立新的链表 p=(struct node *)malloc(sizeof(struct node)) p->info=q->info//将head1链表的数据元素复制到新的节点中 p->next=head//将新节点的的next指向头节点 head=p //将head移向新的节点,for语句结束head就指向了最后建立的节点处即head1的最后一个节点处 //每次插入都是在head和新节点之间移动 (*numnode) } return head } void show(struct node *head) {//遍历链表输出 struct node *p if(head==NULL) { printf("链表为空,没有数据
") return } printf("
-----链表的数据元素------
") for(p=headp!=NULLp=p->next) printf("%d ",p->info) printf("
") } int main() { struct node *head1,*head2 int numnode1,numnode2 numnode1=numnode2=0 head1=head2=NULL //初始化将节点个数初始化为零 head1=Create(&numnode1) show(head1) printf("
链表head1的节点个数为:%d
",numnode1) head2=ReverseCopy(head1,&numnode2) //调用复制函数,完成复制 show(head2) printf("
链表head2的节点个数为:%d
",numnode2) return 0 }