您的位置:首页 > 其它

leetcode-203-Remove Linked List Elements

2015-07-16 19:11 399 查看
Remove Linked List Elements

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

Credits:

Special thanks to @mithmatt for adding this problem and creating all test cases.
删除所有值为val的节点

注意第一个节点和最后一个节点的处理

/**
* 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) return NULL;
ListNode* pre,*h=head;
while (h && h->val == val && h->next){  // 删除在前面所有值为val的节点
h->val = h->next->val ;
h->next = h->next->next ;
}
if (h->val == val) return NULL; //  此时 必定只有一个元素
else {   // pre 为 h 前面的节点
pre = h;
h = h->next;
}
while (h) { // 删除值为val的节点
if (h->val == val) {
pre->next = h->next;
h = h->next;
}
else {
pre = h;
h = h->next;
}
}
return 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* newH;
newH->next = head;
ListNode* cur = newH;
while (cur->next) {
if (cur->next->val == val) {
cur->next = cur->next->next;
}
else cur = cur->next;
}
return newH->next;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: