当前位置:首页>开发>正文

链表的创建 链表的建立

2023-07-15 14:22:11 互联网 未知 开发

 链表的创建 链表的建立

链表的创建

# 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 }