C语言创建单链表

xiaoxiao2021-02-28  60

/*Change the world by PROGRAM让编程改变世界*/ /*这个小程序是用来创建一个单链表,可以指定开始创建的节点数量*/ /*一共有四个函数,用来创建链表,遍历链表,删除节点,倒置链表*/ /*Creat by Bingogo*/ #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode, *LinkList, *p_LNode; // 函数声明部分 // p_LNode CreateLinkList(); void DeleteNode(p_LNode head, ElemType key); void TraverseLinkList(p_LNode head); p_LNode ReverseLinkList(p_LNode head); // 开始 // int main(){ /* 创建链表 */ printf("Create:element element ... 11111111(sign to end)\n"); p_LNode head = (p_LNode)malloc(sizeof(LNode)); if(!(head->next = CreateLinkList())){ // 若创建失败或不创建 getchar(); getchar(); printf("Program will be stopped."); return 0; } printf("Create successfully.\n"); printf("The elements in the linklist you created is: "); TraverseLinkList(head); /* 倒置链表 */ // 记录最后一个结点位置 printf("Reverse the linklist.\n"); p_LNode node = head; while(node->next) node = node->next; // 开始倒置 if(!(head->next && head->next->next)) // 若链表为空或者只有一个链表 printf("Not nessesary to reverse.\n"); else { ReverseLinkList(head->next); head->next = node; printf("After reversing: "); TraverseLinkList(head); } /* 删除元素 */ printf("Input the key element that you want to delete.\n"); ElemType key; scanf("%d", &key); DeleteNode(head, key); printf("After delete: "); TraverseLinkList(head); getchar(); getchar(); return 0; } // 函数定义部分 // /* *******************创建单链表(递归)************************ */ p_LNode CreateLinkList(){ // 输入元素创建单链表 // ElemType e; scanf("%d", &e); if(11111111 != e){ p_LNode node = (p_LNode)malloc(sizeof(LNode)); node->data = e; node->next = CreateLinkList(); return node; } return NULL; } /* ********************遍历单链表***************************** */ void TraverseLinkList(p_LNode head){ while(head->next){ // 遍历操作 // printf("%d ", head->next->data); head = head->next; } printf("\n"); } /* ***********************删除元素**************************** */ void DeleteNode(p_LNode head, ElemType key){ while(head->next){ if(key == head->next->data){ p_LNode node = head->next; head->next = node->next; free(node); } head = head->next; } } /* ************************倒置(递归)************************* */ p_LNode ReverseLinkList(p_LNode preNode){ if(preNode->next->next) // 只适用两个以上结点的单链表 ReverseLinkList(preNode->next); preNode->next->next = preNode; preNode->next = NULL; }
转载请注明原文地址: https://www.6miu.com/read-56532.html

最新回复(0)