单链表
数据结构
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode,*LinkList;
函数:
尾插:
void List_Tinsert(LinkNode *p,int num) //尾插法
{
LinkNode *s = p;
while (s->next) s = s->next;
LinkNode *r = (LinkNode *)malloc(sizeof(LinkNode));
r->data = num;
r->next = NULL;
s->next = r;
}
头插:
void List_Hinsert(LinkNode *p,int num) //头插法
{
LinkNode *s;
s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = num;
s->next = p->next;
p->next = s;
}
链表创建(从1到n按序生成)
void List_create(LinkNode *p,int n)
{
for(int i = 1;i <= n;++i)
List_Tinsert(p,i); //从1到n,尾插生成
printf("Creation complete!\n");
}
节点删除
void List_delete(LinkNode *p,int num)
{
LinkNode *q = p;
while(q->next && q->next->data != num)
{
q = q->next;
} //查找值为num的节点
q = q->next;
if(q == NULL)
return; //节点不存在,返回
else
{
LinkNode *r = q->next;
q->data = r->data;
q->next = r->next;
free(r); //节点存在,删除释放该节点
}
}
输出链表
void List_display(LinkNode *p)
{
LinkNode *s = p;
while (s->next)
{
printf(" %d ",s->next->data);
s = s->next;
}
printf("\n");
}
链表反转
void List_reverse(LinkNode *p)
{
LinkNode *new_entry = p->next,*temp; //定义一个新的new_entry指针,指向p链表的第一个节点(非头节点),以及一个游标指针,用来定位
p->next = NULL; //将原链表头指针指空
while (new_entry)
{
temp = new_entry->next; //游标指针指向下一个节点
new_entry->next = p->next;
p->next = new_entry; //头插法将节点插入p中
new_entry = temp; //new_entry指向temp,继续反转
}
}