删除一个链表中的节点
2015-08-29 17:13
471 查看
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); }
相关文章推荐
- 已知圆弧的一些信息,求得圆弧上中间点的坐标的方法(C++语言描述)
- Apache与Nginx的优缺点比较
- 0008.Scala主构造器、私有构造器、构造器重载实战详解
- 1085 -- 判断奇偶性
- 1084 -- 找子串
- SLua
- 0007.Scala类的属性和对象私有字段实战详解
- 25 Reverse Nodes in k-Group
- 1083 -- 分!分!分! 学生的命根
- 求二叉树节点的最大距离
- Apache与Tomcat 区别联系
- 1082 -- 螺旋矩阵
- 1081 -- 小明A+B(2)
- en_US.UTF-8和zh_CN.UTF-8的区别
- 架构解耦
- 1080 -- 奇数检测
- mac 下android studio 下载sdk
- 去除inline-block元素间间距的N种方法
- Python爬虫框架Scrapy教程(1)—入门
- 我的第一篇csdn博客 -- 自定义View