在写之前,我想说的是;
大学里的数据结构教材中的link list与LEETCODE中的结构不一样;
数据结构这本教材中的链表是有头指针的即:第一个值为head->next;
在LEETCODE中链表是没有头指针的即:第一个值为head(head即指向第一个元素);
//—————————————————————–//
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
//—————————————————————//
思路:如果链表不为空先找到第一个值不等于val的元素,head就停留在这个位置不变以便以后返回用,再定义 p , q 两个指针,在相互作用下提出剩余部分中值等于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 == NULL)
return head;
while(head->val == val) {
head = head->next;
if (head == NULL)
return head;
}
ListNode *p = head;
ListNode *q = p->next;
if (q == NULL)
return head;
while (q != NULL) {
if (p->next->val == val)
{
p->next = q->next;
q = q->next;
}
else
{
p = q;
q = q->next;
}
}
return head;
}
};