链表是由一系列不必在内存中相连的结构组成。每个结构均含有表元素和指向包含该元素后继元的结构的指针。
链表元素的创建
typedef struct ListNode
{
int val;
struct ListNode *next;
}ListNode;
``第一个ListNode是结构类型,第二个则是根据这个结构类型所创建的实例,这个名为ListNode的结构中,有一个int类型的val,通过ListNode->val来调用。next是指向结构的指针。
链表的创建
ListNode *creatList(ListNode *pHead) //创建新链表
{
ListNode *p1,*p2;
p1 = p2 = (ListNode *)malloc(sizeof(ListNode));// 申请新节点
if(p1 == NULL || p2 == NULL)
{
printf(“内存分配失败\n”);
exit(0);
}
memset(p1,0,sizeof(ListNode)); //清空结构p1
scanf("%d",&p1->val);
p1->next = NULL;
while(p1->val > 0)
{
if(pHead == NULL)
{
pHead = p1;
}
else
p2->next = p1;
p2 = p1;
p1 = (ListNode *)malloc(sizeof(ListNode));
if(p1 == NULL || p2 == NULL)
{
printf("内存分配失败\n");
exit(0);
}
memset(p1,0,sizeof(ListNode));
scanf("%d",&p1->val);
p1->next = NULL;
}
printf("creatList函数执行,链表创建成功\n");
return pHead;
}
void printfList(ListNode *pHead) //打印链表,遍历链表
{
if(pHead == NULL)
{
printf("PrintList函数执行,链表为空\n");
}
else
{
while(pHead != NULL)
{
printf("%d ",pHead->val);
pHead = pHead->next;
}
printf("\n");
}
}
测试
int main(void)
{
ListNode *List = NULL;
initList(&List);
printfList(List);
List = creatList(List);
printfList(List);
}
测试结果如下