您的位置:首页 > 其它

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;
}
};

所有的理解,代码注释里面写的也很清楚了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: