描述
删除链表中等于给定值val的所有节点。
样例
给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5
分析
- 判断链表是否为空,若是,返回NULL,若不是,进行下一步
- 判断链表第一个结点是否为要删除的结点,若是,将head指针向后移,若不是,无需操作;
- 定义指针pre,判断当前访问的结点是否为val:
- 是,将pre->next指向当前访问结点的下一个结点;
- 不是,将pre向后移动一个结点
代码(c++)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
* @param head a ListNode
* @param val an integer
* @return a ListNode
*/
ListNode *removeElements(ListNode *head, int val) {
// Write your code here
// 头结点是val
while (head == NULL || head->val == val) { //注意这里是while,不是if
if (head == NULL)
return NULL;
else
head = head->next;
}
ListNode *pre = head;
while (pre->next != NULL) {
if (pre->next->val == val)
pre->next = pre->next->next;
else
pre = pre->next;
}
return head;
}
};
在LINTCODE做的第一道题,花了好久。 。。
没有考虑到此情况:1->1->->NULL , val=1