数据结构示例之单链表删除元素

来源:互联网 发布:数据手册 编辑:程序博客网 时间:2024/05/21 11:34

以下是”链表删除元素“的简单示例:

1. 用c语言实现的版本

#include<stdio.h>#include<stdlib.h>typedef   char  datatype;typedef  structnode{datatype  data;struct node  *next;} listnode;typedef  listnode  *linklist;listnode  *p;/* 创建链表,从表头插入新元素 */linklist  createlist(void){char ch;linklist  head;listnode  *p;head = NULL;/*初始化为空*/printf("请输入字符序列: \n");ch = getchar();while (ch != '\n'){p = (listnode*)malloc(sizeof(listnode));/*分配空间*/p->data = ch;/*数据域赋值*/p->next = head;/*指定后继指针*/head = p;/*head指针指定到新插入的结点上*/ch = getchar();}return head;}/* 删除第i个节点 */int  deletelist(linklist *head, int i){int j = 1;listnode * p, *r;p = *head;if (i == 1) //删除第1个结点{*head = p->next;free(p);return 1;}//删除第i个结点(i>1),寻找第i-1个结点 while (p && j<(i - 1)){p = p->next;++j;}if (!p || j>(i - 1)){return -1;}r = p->next;p->next = r->next;free(r);return 1;}int main(){linklist list, head;int i;/* 创建链表,从表头插入新元素 */list = createlist();head = list;printf("在删除前,输出链表中的元素\n");do{printf("%c", head->data);head = head->next;} while (head != NULL);printf("\n请输入要删除的结点位置(n>=1):");scanf("%d", &i);/* 删除第i个节点后的节点 */deletelist(&list, i);printf("在删除后,输出链表中的元素\n");do{printf("%c", list->data);list = list->next;} while (list != NULL);printf("\n");}

运行结果如下图所示:


0 0
原创粉丝点击