[LeetCode]Remove Linked List Elements
2015-07-20 00:10
330 查看
解题思路:
1,以第一个值不为val的node为head,起始遍历的node;
2,head不为空,每次找到值等于val的node,从链中将其移除,并free
临界条件:head不为空,在找到起始node之前,都要保证这个条件
前条件:找到head值不为val,p = head, q = p->next
不变式:判断 q->val 是否为val, 若q->val == val , p->next = q->next, free(q), q = p->next; 否则,p = q; q = p->next;
结束条件:q == NULL
1,以第一个值不为val的node为head,起始遍历的node;
2,head不为空,每次找到值等于val的node,从链中将其移除,并free
临界条件:head不为空,在找到起始node之前,都要保证这个条件
前条件:找到head值不为val,p = head, q = p->next
不变式:判断 q->val 是否为val, 若q->val == val , p->next = q->next, free(q), q = p->next; 否则,p = q; q = p->next;
结束条件:q == NULL
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* removeElements(ListNode* head, int val) { if (head == NULL) return NULL; while( head != NULL && head->val == val ){ ListNode *temp = head; head = head->next; free(temp); } if (head == NULL){ return NULL; } ListNode *p = head; ListNode *q = p->next; while (q != NULL){ if (q->val == val){ p->next = q->next; free(q); q = p->next; }else{ p = q; q = q->next; } } return head; } };
相关文章推荐
- ApplicationContext的三种实现方式以及在web.xml配置的两种方式
- [BZOJ1085][SCOI2005]骑士精神
- Picasso:一个强大的图片下载和缓存库
- C Language Study - gets , getchar & scanf
- 我想做一个合格的工程师
- Exchange Server 2013 公网发布疑难解答
- 猜拳小游戏过程以及感悟
- [BZOJ2456]mode
- Ninject依赖注入——构造函数、属性、方法和字段的注入
- 解决The current branch is not configured for pull No value for key branch.master.merge found in config
- FreeBSD 10添加Swap文件
- eclipse连接hbase异常KeeperErrorCode = ConnectionLoss for /hbase/meta-region-server
- hdu1072(bfs搜索退出的条件有变)
- [BZOJ1798][Ahoi2009]Seq 维护序列seq
- 2015年ALPC暑期专题练习I (计算几何) D Intersecting Lines
- poj1179polygon
- android studio中文乱码各种情况的解决办法
- a new star
- VB.NET调用MySQL存储过程并获得返回值的方法
- ASP.NET Web API如何将注释自动生成帮助文档