链表

1.什么是链表

链表是结构体变量与结构变量连接的一起

2.怎么动态创建链表

动态内存申请+模块化设计

(1)创建链表(创建一个表头表示整个链表)

struct Node{
int data; //数据域
struct Node* next; //指针域
}
struct Node* createList()
{
struct Node* headNode=(struct Node*)malloc(sizeof(Node));
//headNode成为了结构体变量,变量使用前必须被初始化
//headNode->data=1
headNode->next=NULL;
return headNode;
}

(2)创建节点

struct Node* createNode(int data){
struct Node*newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->data=data;
newNode->next=NULL;
return newNode;
}

(3)插入节点

void insertNodeByHead(struct Node* headNode,int data)
{
struct Node* newNode=creatNode(data);
newNode->next=headNode->next;
headNode->next=newNode;
}

(4)删除节点

void deleteNodeByAppoin(struct Node* headNode,int postData)
{
struct Node *posNode=headNode->next;
struct Node* posNodeFront=headNode;
if(posNode==NULL)
{
printf("无法删除链表为空\n")
}
else
{
while(posNode->data!=postData)
{
posNodeFront=posNode;
posNode=posNodeFront->next;
if(posNode==NULL)
{
printf("没有找到相关信息,无法删除\n");
return;
}
}
posNodeFront->next=posNode->next;
free(posNode);
}
}

(5)打印遍历链表(测试)

void printList(struct Node* headNode)
{
struct Node* pMove=headNode->next;
while(pMove)
{
printf("%d\t",pMove->data);
pMove=pMove->next;
}
printf("\n");
}

(6)主函数

int main()
{
struct Node*lst=createList();

}