c语言单链表的头插法和尾插法

一:头插法

#include<stdio.h> #include<stdlib.h> typedef struct link{ int x; // 数据域 struct link * next; // 指针域 }LINK; int main() { LINK* head = (LINK*)malloc(sizeof(LINK)); // 头节点 LINK *current; head->next = NULL; int number; while(scanf("%d",&number) ==1 && number != -1) { current = (LINK*) malloc(sizeof(LINK)); current->x = number; current->next = head->next ; // 新结点为原来结点的地址 head->next = current; // 头节点指向新结点 } LINK *p; for(p = head->next ; p ; p = p->next ) // 遍历输出 { printf("%d ",p->x ); } for(p = head ; p ; p = head ) // 释放空间 { head = p->next ; free(p); } return 0; }

二:尾插法

#include<stdio.h> #include<stdlib.h> typedef struct link{ int x; // 数据域 struct link * next; // 指针域 }LINK; int main() { LINK* head = NULL; // 头节点 LINK *current ,*prev; int number; while(scanf("%d",&number) ==1 && number != -1) { current = (LINK*) malloc(sizeof(LINK)); current->x = number; if(head == NULL) // 判断是否是第一个结构 head = current; else prev->next = current; current->next = NULL; // 当前结点的指针指向NULL 表明是最后一个结构 prev = current; } LINK *p; for(p = head ; p ; p = p->next ) // 遍历输出 { printf("%d ",p->x ); } for(p = head ; p ; p = head ) // 释放空间 { head = p->next ; free(p); } return 0; }

经验分享 程序员 微信小程序 职场和发展