单链表
结构体->结构体==链表
声明
struct ListNode
{
int data;
struct ListNode *next;
};
建立头结点
struct ListNode *head;
head->next = NULL;//数据不需初始化
申请新节点并插入,这里写头插法
struct ListNode *p;
p = (struct ListNode*)malloc(sizeof(struct ListNode));
p->data = 1;
p->next = head->next;
head->next = p;
尾插法
struct ListNode *p;
p = (struct ListNode*)malloc(sizeof(struct ListNode));
p->data = 1;
struct ListNode *replace = head;
while(replace->next!=null)
{
replace = replace->next;//找到尾结点
}
replace->next = p;
p->next = null;
ps:可以加一个尾指针让他一直指向尾结点,调用尾插法就不用每次遍历链表,提高了效率
查询单链表
遍历一遍就欧克,注意分找到和没找到情况
int data1 = 10;
struct ListNode *pre = head;
while(pre!=null)
{
if(pre->data!=data1)
{
pre = pre->next;
}
else
{
//可以打印
//或者返回节点指针,看自己需求写
}
}
单链表相对于数组的优势
1、单链表是动态内存,可以随意增加减少节点,以节约空间,数组大小是固定的,容易浪费空间
2、插入删除数据时单链表只需要改对应指针指向,而数组需要移动大量数据
删除
struct ListNode *pre,*p,*after;
pre = head->next;
p = pre->next;
after = p->next;
pre-> = after;
free(p);