next=NULL;for (int i=0;i{s=(struct">

头插法和尾插法建立单链表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档