#include <stdio.h> #include <stdlib.h> typedef struct link { int data; struct link *next; }node; void print_link(node *head) { printf("the link:\n"); while (head) { printf("%d ", head->data); head = head->next; } printf("\n"); } int length_link(node *head) { int len = 0; while (head) { len++; head = head->next; } return len; } node * delete_node(node *head, int data) { node *p, *q; if (!head) return head; p = head; if (head->data == data) { head = head->next; free(p); return head; } while (p->next) { q = p->next; if (q->data == data) { p->next = q->next; free(q); return head; } p = q; } return head; } node *insert_node(node *head, int data) { node *p, *s, *q; s = (node*)malloc(sizeof(node)); s->data = data; if (!head) { head = s; head->next = NULL; return head; } p = head; q = NULL; while (p && data >= p->data) { q = p; p = p->next; } if (!q) { s->next = head; head = s; } else { q->next = s; s->next = p; } return head; } node * creat_link(void) { node *head = NULL; int data; while (1) { printf("insert a num:"); scanf("%d", &data); if (data == 0) break; head = insert_node(head, data); } return head; } node * reverse_link(node *head) { node *p, *q, *r; if (!head || !head->next) return head; p = head; q = head->next; while (q) { r = q->next; q->next = p; p = q; q = r; } head->next = NULL; return p; } int main(void) { printf("creat a link:\n"); node *head = creat_link(); print_link(head); printf("link length:%d\n", length_link(head)); printf("delete a node 3:\n"); head = delete_node(head, 3); print_link(head); printf("insert a node 3:\n"); head = insert_node(head, 3); print_link(head); printf("reverse link:\n"); head = reverse_link(head); print_link(head); return 0; }
2008年10月16日星期四
单链表:打印,测长,建立,节点插入,节点删除,逆置
订阅:
博文评论 (Atom)
没有评论:
发表评论