单链表创建

来源:互联网 发布:淘宝 真皮皮带 编辑:程序博客网 时间:2024/05/17 03:13

带头结点

#include<stdio.h>#include<malloc.h>#include<conio.h>/*  创建带有头结点的链表   两者的区别:     1、不带头结点的单链表对于第一个节点的操作与其他节点不一样,需要特殊处理,这增加了程序的复杂度和出现bu的机会,通常设置头结点     2、带头结点的单链表,初始化时一定返回的是指向头结点的地址,所以要用二级指针*/typedef struct Node{char data;    struct Node *next;}Node;void initList(Node **linkList){//只一种方式,必须使用二级指针 *linkList = (Node*)malloc(sizeof(Node));(*linkList)->next = NULL;}
//创建链表void createList(Node *linkList){//两种方式,使用一级指针和二级指针都可以创建 Node *rear = linkList,*p;char ch = getche();while(ch != '\r'){p = (Node*)malloc(sizeof(Node));p->data = ch;rear->next = p;rear = p;ch = getche(); }rear->next = NULL;}void travel(Node *linkList){Node *p = linkList->next;printf("\n链表元素:"); while(p){printf("%c ",p->data);p = p->next;}}//链表长度int lengthList(Node *linkList){Node *p = linkList->next;int len=0;while(p){p = p->next;len++; } printf("\n链表的长度:%d",len);return len;}//在第k位置前插入节点void insertHead(Node *linkList,int k,char ch){Node *temp,*p = linkList->next;int i=1;if(k<1 || k>lengthList(linkList)+1){return;}while(p && i<k-1){p = p->next;i++;}temp = (Node*)malloc(sizeof(Node));temp->data = ch;temp->next = p->next;p->next = temp;} //删除第k位置的节点void  deleteChar(Node *linkList,int k,char *ch){Node *temp,*p = linkList->next;if(k<1){return;}int i=1;while(i<k-1){if(p->next == NULL){return;}p= p->next;i++;}temp = p->next;*ch = temp->data;p->next = p->next->next;free(temp);}


不带头结点


#include<stdio.h> #include<conio.h>#include<malloc.h>//不带头结点的单向链表 typedef struct Node{char data;struct Node *next;}Node;//初始化void initList(Node *linkList){//用一级指针和二级指针都可以初始化 linkList = NULL;} //创建链表 /*在创建链表时,要使用二级指针,保证链表的地址不变 用二级指针(通常是形参)去修改一级指针(实参)的值      相当于在被调用函数里面分配内存,把结果传出来,这就是指针做参数的精华 */ void create(Node **linkList){//表示的指向指针的指针,*linkList表示:链表的地址 ,只能使用二级指针 Node *rear,*temp;*linkList = rear = NULL;char ch = getche();while(ch != '\r'){temp = (Node *)malloc(sizeof(Node));temp->data = ch;if(*linkList == NULL){*linkList = temp;}else{rear->next = temp;}rear=temp;ch = getche();}rear->next = NULL;}//遍历链表 void travel(Node *linkList){    Node *p = linkList;    printf("\n链表中的元素:");while(p != NULL){printf("%c ",p->data);p = p->next;}}//链表的长度int listLength(Node *linkList){Node *p = linkList;int len=0; while(p != NULL){p = p->next;len++;}return len;} //插入节点(第i位置之前)void insertHead(Node *linkList,int k,char ch){Node *temp,*p = linkList;int i=1;while(p && i<k-1){p = p->next;i++;}temp = (Node *)malloc(sizeof(Node));temp->data = ch;temp->next = p->next;p->next = temp;} 


0 0