Remove Linked List Elements
2016-05-07 16:58
225 查看
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
分析:
这个问题肯定是的有两个指针,一个指向当前所要检测的节点,另外一个是指向所检测节点之前的节点,这样子就可以直接修改指针,达到删除元素的效果。实际编程的时候有两个地方应该考虑到,就是如果起手第一个元素就是的,也就是所现在链表的第一个元素都要删除了,那么就要修改head指针,因为最后返回的是head指针。第二个就是如果删除掉一个元素之后,移动的只是当前检测的指针,而当前检测指针的前项指针是不用动的。
代码如下:
/**
* 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) {
ListNode * p, *h;
h = head;
while(h){
if(head->val == val){
head = head -> next;//如果第一个元素就是要删除的,这个时候head指针是要修改的,因为最后返回的是head指针
}
else if(h->val ==val){
p->next = h->next;//删除掉指定的元素
h = h -> next;//将当前检测的指针向后移动一次,而当前检测元素的前项指针是不用动的
continue;
}
//这两行是正常的指针过度,即如果元素不是要删除的元素的时候,指针移动的情况
p = h;
h = h -> next;
}
return head;
}
};
所有的理解,代码注释里面写的也很清楚了。
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
分析:
这个问题肯定是的有两个指针,一个指向当前所要检测的节点,另外一个是指向所检测节点之前的节点,这样子就可以直接修改指针,达到删除元素的效果。实际编程的时候有两个地方应该考虑到,就是如果起手第一个元素就是的,也就是所现在链表的第一个元素都要删除了,那么就要修改head指针,因为最后返回的是head指针。第二个就是如果删除掉一个元素之后,移动的只是当前检测的指针,而当前检测指针的前项指针是不用动的。
代码如下:
/**
* 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) {
ListNode * p, *h;
h = head;
while(h){
if(head->val == val){
head = head -> next;//如果第一个元素就是要删除的,这个时候head指针是要修改的,因为最后返回的是head指针
}
else if(h->val ==val){
p->next = h->next;//删除掉指定的元素
h = h -> next;//将当前检测的指针向后移动一次,而当前检测元素的前项指针是不用动的
continue;
}
//这两行是正常的指针过度,即如果元素不是要删除的元素的时候,指针移动的情况
p = h;
h = h -> next;
}
return head;
}
};
所有的理解,代码注释里面写的也很清楚了。
相关文章推荐
- delphi线程的创建、挂起、激活与终止
- 中缀转后缀问题代码(水数据改变世界=。=)
- 前端开发中的字符编码
- JAVA中Iterator遍历,添加出现的ConcurrentModificationException异常
- Win7下Tomcat6的安装及使用
- c++单例模式 ---超详细
- Codeforces Round #254 (Div. 1) D. DZY Loves Strings hash 暴力
- ultraedit15.00.0.1046注册码
- poj 1160 Post Offices(经典dp)
- 把字符串转换成整数
- Java反射机制浅析
- bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
- 【SSH网上商城项目实战04】EasyUI菜单的实现
- Yii2.0模型层数据验证和thinkPHP3.2框架模型层数据验证对比
- 做人
- 16进制
- 数论知识总结
- Adaboost 算法的原理与推导
- C++sort
- 5.7