本文共 1532 字,大约阅读时间需要 5 分钟。
typedef struct node { int value; struct node* next;} Node,pNode;Node *g_head = NULL;void InsertHead() //头插法创建节点,不带头结点{ Node *p = (Node*)malloc(sizeof(Node)); if (!p) { puts("创建节点失败!"); exit(1); } int iValue; printf("请输入一个数值:"); scanf("%d", &iValue); p->value = iValue; p->next = NULL; printf("请输入一个数值:"); while(scanf("%d",&iValue)!=EOF) { Node *pTemp = (Node*)malloc(sizeof(Node)); if (!p) { puts("创建节点失败!"); exit(1); } pTemp->next = p; pTemp->value = iValue; p = pTemp; } g_head = p; return; }void DeleteNode(Node *head,int key) //按值查找删除节点{ Node *pTemp; Node *pDelete; pTemp = pDelete = head; int i=1; while (1) { if (pDelete && pDelete->value!=key) { pTemp = pDelete; pDelete = pDelete->next; i++; continue; } if (pDelete==NULL) { puts("不存在该值!"); return; } else { if (i==1) g_head = pDelete->next; pTemp->next = pDelete->next; free(pDelete); pDelete = NULL; return; } }} void InvertNode(Node *p) //反转单链表{assert(p);Node *pFront = (Node *)malloc(sizeof(Node)); //做为头结点使用pFront->next = NULL;Node *pTemp = p->next;while (p){p->next = pFront->next;pFront->next = p;p = pTemp;if (!p) break;pTemp = pTemp->next;}g_head = pFront->next;free(pFront);pFront = NULL;} void printNode(Node *p) //打印链表节点{ while (p) { printf("%d ",p->value); p = p->next; }}void main(){ InsertHead(); printNode(g_head); printf("\n"); //输入 10,20,30,40,50// DeleteNode(g_head, 10);// DeleteNode(g_head, 50);// DeleteNode(g_head, 30);// DeleteNode(g_head, 100); printNode(g_head);}
转载地址:http://dbkqi.baihongyu.com/