头插法和尾插法建立单链表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "stdio.h"
#include "stdlib.h"
typedef struct List
{
int data;
struct List *next; //指针域
}List;
void HeadCreatList (List *L) //头插法建立链表
{
List *s;
L->next=NULL;
for (int i=0;i<10;i++)
{
s=(struct List*)malloc(sizeof(struct List));
s->data=i;
s->next=L->next; //将L指向的地址赋值给S;
L->next=s;
}
}
void TailCreatList(List *L) //尾插法建立链表
{
List *s,*r;
r=L;
for (int i=0;i<10;i++)
{
s=(struct List*)malloc(sizeof(struct List));
s->data=i;
r->next=s;
r=s;
}
r->next=NULL;
}
void DisPlay(List *L)
{
List *p=L->next;
while(p!=NULL)
{
printf ("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main ()
{
List *L1,*L2;
L1=(struct List*)malloc(sizeof(struct List));
L2=(struct List*)malloc(sizeof(struct List)); HeadCreatList(L1);
DisPlay(L1);
TailCreatList(L2);
DisPlay(L2);
}
//头插法创建链表
#include
#include
struct node
{
int data;
struct node * next;
};
//建立只含头结点的空链表
struct node * create_list()
{
struct node * head = NULL;
head = (struct node *)malloc(sizeof(struct node));
if (NULL == head)
{
printf("memory out of use/n");
return NULL;
}
head->next = NULL;
head->data = 0;
return head;
}
//头插法建立链表
int insert_form_head(struct node * head, int num)
{
struct node * head_t = head->next;
struct node * new_node = NULL;
new_node = (struct node *)malloc(sizeof(struct node));
if (NULL == new_node)
{
printf("memory out of use/n");
return -1;
}
//将新结点插入到链表的最后
new_node->data = num;
new_node->next = head_t;
head->next = new_node;
return 0;
}
//打印链表
int show_list(struct node * head)
{
struct node * temp;
temp = head->next;
while(temp)
{
printf("%d/n",temp->data);
temp = temp->next;
}
return 0;
}
// 按值删除结点,头结点不被删除
int delete_node(struct node *head, int data) {
//head_t 保存要删除结点的上一个结点
struct node * head_t = head;
struct node * temp = NULL;
if (head == NULL)
{
printf("delete node from empty list!/n");
return -1;
}
//查找删除的结点的前一个结点
//如果此处查找的是删除的结点,则需要另加一个指针保存删除结点的前一个指针while(NULL != head_t->next)
{
if (data == head_t->next->data)
break;
head_t = head_t->next;
}
//如果要删除的结点不存在,直接返回
if (NULL==head_t->next)
{
printf("node not found/n");
return -1;
}
//删除操作
temp = head_t->next;
head_t->next = head_t->next->next;
free(temp);