单链表-创建、插入、删除、查找、反转等操作

来源:互联网 发布:windows pe 启动光盘 编辑:程序博客网 时间:2024/04/30 07:23

//list.h

#ifndef _List_H#define _List_H#include <stdio.h>#include <stdlib.h>#define NotFound NULL;typedef struct List {int value;struct Node * next;}Node;typedef struct List *pNode;typedef pNode pList;typedef pNode Position;pList creatList(int *array, int len);Position findNode(pList head, int x);pList lastInsertList(pList head, int insertvalue);pList InsertList(pList head, int val, int insertvalue);pList deleteNode(pList head, int delValue);pList reversalList(pList head);pList freeList(pList head);void printList(pList head);#endif    /* _List_H */

//list.c

#include "singleList.h"pList creatList(int *array, int len){pList head,ptr,tmp;int i;head = (pList)malloc(sizeof(Node));if(!head){printf("分配内存失败!");return NULL;}head->next = NULL;head->value = array[0];tmp = head;for(i = 1; i < len; i++){ptr = (pList)malloc(sizeof(Node));if (!ptr){printf("分配内存失败!");return NULL;}ptr->value = array[i];ptr->next = NULL;tmp->next = ptr;tmp = tmp->next;}return head;}Position findNode(pList head, int x){pList ptr = head;while(ptr){if(ptr->value == x)return ptr;ptr = ptr->next;}return NotFound;}//在末节点插入pList lastInsertList(pList head, int insertvalue){pList tmp,ptr;if(!head)return NULL;ptr = head;while(ptr->next)ptr = ptr->next;tmp = (pList)malloc(sizeof(Node));ptr->next = tmp;tmp->value = insertvalue;tmp->next = NULL;return head;}//在值为val的节点前插入pList InsertList(pList head, int val, int insertvalue){pList temp = head->next;pList ptr = head;if(head->value == val){pList tmp = (pList)malloc(sizeof(Node));tmp->next = head;tmp->value = insertvalue;head = tmp;return head;}while(temp){if(temp->value == val){pList tmp = (pList)malloc(sizeof(Node));tmp->next = temp;tmp->value =  insertvalue;ptr->next = tmp;return head;}temp = temp->next;ptr = ptr->next;}return NotFound;}pList deleteNode(pList head, int delValue){pList ptr,temp;ptr = head;temp = head->next;if(ptr->value == delValue){pList p = ptr;ptr = ptr->next;head = ptr;free(p);return head;}while(temp){if(temp->value == delValue){temp = temp->next;ptr->next = temp;return head;}temp = temp->next;ptr = ptr->next;}return NotFound;}pList reversalList(pList head){pList ptr,temp;ptr = head;temp = head->next;while(temp->next){pList p = temp;temp = temp->next;p->next = ptr;ptr = p;}temp->next = ptr;head->next = NULL;return temp;}pList freeList(pList head){pList ptr;while(head){ptr = head;head = head->next;free(ptr);}return head;//注意内存分配问题}void printList(pList head){if(!head){printf("the list is empty!\n");return;}printf("the list is : ");while(head){printf("%d ",head->value);head = head->next;}printf("\n");}

//main.c

#include "singleList.h"int main(void){int array[] = {1,2,3,4,5,6,7,8,9,10};int len = sizeof(array)/sizeof(*array);int insertvalue = 100;Position p;pList head = creatList(array,len);printList(head);head = reversalList(head);printList(head);p = findNode(head,5);printf("the position value is : %d\n",p->value);//在元素为10前面插入100head = InsertList(head,10,insertvalue);printList(head);//在末节点后面插入10000head = lastInsertList(head,10000);printList(head);//删除10000的节点head = deleteNode(head,10000);printList(head);head = deleteNode(head,1);printList(head);head = deleteNode(head,5);printList(head);//释放链表head = freeList(head);printList(head);}


原创粉丝点击