linux C学习笔记03--单链表
单链表一直是程序员的基础,我也来复习下,下面是link.c中的代码,供main.c 调用,代码很简单,单链表的插入,删除,查找和遍历输出,
#include <stdio.h> #include <stdlib.h> typedef struct link{ int data; struct link* next; }*LINK; int insert_link(LINK* head,int data); int print(LINK head); int delete_node(LINK *head,int n); int find_node(LINK head,int n); int insert_link(LINK* head,int data) { LINK node = (LINK)malloc(sizeof(struct link)); LINK tmp = NULL; if(node != NULL) { node->data = data; node->next = NULL; } else { printf("malloc new node error!\n"); return -1; } if(*head == NULL) { *head = node; return 0; } tmp = *head; while(tmp->next != NULL) //find ending node { tmp = tmp->next; } tmp->next = node; return 0; } int print(LINK head) { LINK tmp = head; while(tmp != NULL) { printf("%d \n",tmp->data); tmp = tmp->next; } return 0; } int delete_node(LINK *head,int n) //delete the node of index is n { LINK tmp = *head; LINK save = tmp; int i = 0; if(n == 1) { tmp = tmp->next; free(save); *head = tmp; return 0; } while(tmp != NULL) { if(i == n-1)
{ save->next = tmp->next; free(tmp); break; } save = tmp; tmp = tmp->next; i++; } if(n-1 > i) { printf("error: delete %d is out of length\n",n); return -1; } return 0; } int find_node(LINK head,int n) { LINK tmp = head; int data = 0; int i = 0; while(tmp != NULL) { if(i == n-1) { data = tmp->data; break; } tmp = tmp->next; i++; } if(n-1 > i) { printf("find_node error: out of link length\n"); return -1; } return data; }
接着是main.c:
#include <stdio.h> #include <stdlib.h> typedef struct link{ int data; struct link* next; }*LINK; extern int insert_link(LINK* head,int data); extern int print(LINK head); extern int delete_node(LINK *head,int n); extern int find_node(LINK head,int n); int main(int argc,char* argv[]) { LINK phead = NULL; insert_link(&phead,1); insert_link(&phead,2); insert_link(&phead,3); insert_link(&phead,4); insert_link(&phead,5); insert_link(&phead,6); print(phead); delete_node(&phead,1); //delete the node by index print(phead); delete_node(&phead,2); //delete the node by index print(phead); delete_node(&phead,1); //delete the node by index print(phead); printf("find node 6 is %d\n",find_node(phead,6)); //finding the node by index return 0; }