链表指定值清除(C++)
2015-12-09 22:41
337 查看
题目:
有一个单链表。链表中每个节点保存一个整数,给定一个值val,把所有等于val的节点删掉。
给定一个单链表的头结点head,同时给定一个值val,返回清除后的链表的头结点,保证链表中有不等于该值的其它值。
同时保证其他元素的相对顺序。
如:
输入:{1,2,3,4,3,2,1},2
输出:{1,3,4,3,1}
思路:
这道题的思路比较简单,遍历一次链表即可。
每次判断当前结点的下一个结点的val是否等于给定的val
如果相等 删除下一个结点并将链表重新连接 即可。
如果不等 遍历下一个结点。
贴代码:
有一个单链表。链表中每个节点保存一个整数,给定一个值val,把所有等于val的节点删掉。
给定一个单链表的头结点head,同时给定一个值val,返回清除后的链表的头结点,保证链表中有不等于该值的其它值。
同时保证其他元素的相对顺序。
如:
输入:{1,2,3,4,3,2,1},2
输出:{1,3,4,3,1}
思路:
这道题的思路比较简单,遍历一次链表即可。
每次判断当前结点的下一个结点的val是否等于给定的val
如果相等 删除下一个结点并将链表重新连接 即可。
如果不等 遍历下一个结点。
贴代码:
#include <iostream> using namespace std; struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode* clearSpecificValue(ListNode* head, int val) { if (head == NULL) { return head; } // 头结点的前一个结点 ListNode preNode(-1); preNode.next = head; ListNode *curNode = &preNode; while(curNode->next != NULL) { if (curNode->next->val == val) { ListNode *nextNode = curNode->next; curNode->next = nextNode->next; delete nextNode; // 内存泄露 } else { curNode = curNode->next; } } return preNode.next; }
相关文章推荐
- 每天C语言总结
- C++11 <regex>
- 提高C++程序运行效率的10个简单方法
- 检查gcc编译器是否C++ 11特性
- [c++]单链表(class)
- C++左值引用和右值引用
- C语言易错点:字符串的连接
- Effective C++阅读笔记_条款2:尽量以const,enum,inline替换#define
- [C++] Test question(1-16)
- C语言:sizeof导致的Memory access violation
- 链表的分化问题(C++)
- 实战c++中的string系列--指定浮点数有效数字并转为string
- 实战c++中的string系列--指定浮点数有效数字并转为string
- (学习)C++ Primer(1)
- 实战c++中的string系列--string与整型或浮点型互转
- 实战c++中的string系列--string与整型或浮点型互转
- C语言快排模板 qsort();函数应用
- HDU2089 不要62【数位DP】
- c++ 11 右值引用原理
- 设计Qt风格的C++API