知识点:
1.总结什么情况下初始化成头节点,什么情况下初始化成第一个节点:
①初始化成头节点:尾插,在pos位置插入val值,删除pos位置的值,获取key的前驱地址(特殊)
②初始化成第一个节点:获取数据节点个数,查找第一个key值,打印,销毁(特殊)
只要改变结构的,都初始化成第一个节点(返回key的前驱地址除外),只要不改变结构的都初始化成第一个节点(销毁除外)
结构体
typedef struct Node
{
int data;
struct Node* next;
}Node,*List;
1.初始化
void InitList(List plist)
{
assert(plist != NULL);
if(plist == NULL)
return ;
plist->next = NULL;
}
初始化测试
Node head;
InitList(&head);
printf("程序正常结束\n");
2.头插
bool Insert_head(List plist,int val)
{
assert(plist != NULL);
if(plist == NULL)
return false;
Node *p = (Node *)malloc(sizeof(Node));
assert(p != NULL);
if(p==NULL)
return false;
p->data = val;
p->next = plist->next;
plist->next = p;
return true;
}
头插测试
Node head;
InitList(&head);
for(int i = 0;i<10;i++)
{
Insert_head(&head,i);
}
Show(&head);
printf("程序正常结束\n");
3.尾插
bool Insert_tail(List plist,int val)
{
assert(plist != NULL);
if(plist == NULL)
{
return false;
}
Node *p = (Node *)malloc(sizeof(Node));
assert(p != NULL);
if(p == NULL)
{
return false;
}
p->data = val;
Node *q;
for(q=plist;q ->next != NULL;q=q->next)
{
;
}
p->next = q->next;
q->next = p;
return true;
}
尾插测试
Node tail;
InitList(&tail);
for(int i = 0;i<10;i++)
{
Insert_tail(&tail,i);
}
Show