回复 6楼 renkejun1942
感觉插入应该只是new出节点并用memset初始化清零~然后在插入函数外面赋值~
写了个创建链表和销毁链表的泛型代码~
Link.h

程序代码:
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//PTYPE 链表指针类型 NAME 函数名称 LEN 链表容量大小 NEXT链表指针名称
#define MAKE(PTYPE,NAME,LEN,NEXT) \
\
void Creat_Node_##NAME(PTYPE* p) \
{ \
*p=(PTYPE)malloc(LEN); \
assert(*p!=NULL); \
memset(*p,0,LEN); \
} \
\
void Del_One_##NAME(PTYPE* p) \
{ \
if (*p==NULL) \
return ; \
\
free(*p); \
*p=NULL; \
} \
void Del_Link_##NAME(PTYPE* p) \
{ \
PTYPE t=*p; \
while (t=t->##NEXT) \
{ \
Del_One_##NAME(p); \
*p=t; \
} \
\
*p=NULL; \
}

程序代码:
#include"Link.h"
#include<stdio.h>
typedef struct Node
{
int n;
struct Node* next;
}Node,*PNode;
MAKE(PNode,S,sizeof(Node),next)
PNode Creat_S(PNode p);
void Print(PNode p);
int main()
{
PNode head=NULL;
Creat_Node_S(&head);
head=Creat_S(head);
Print(head);
Del_Link_S(&head);
return 0;
}
PNode Creat_S(PNode head)
{
int n=0;
PNode p=NULL;
PNode t=NULL;
if (head==NULL)
Creat_Node_S(&head);
p=head;
while (p->next)
p=p->next;
while (scanf("%d",&n)!=EOF)
{
Creat_Node_S(&t);
t->n=n;
p=p->next=t;
}
return head;
}
void Print(PNode p)
{
if (p==NULL||p->next==NULL)
{
puts("这是一张空表!");
return ;
}
while (p=p->next)
printf("%-3d",p->n);
puts("");
}