题目
Remove all elements from a linked list of integers that have value val.
Example:
Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5
分析
- 本题属于典型的链表节点删除题目,使用虚拟头节点可以省去很多特殊的情况单独考虑
代码和注释
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode ret, *p, *q; // 定义虚拟头节点
ret.next = head; //虚拟头节点指向真正的头节点
p = &ret; // 节点指针p指向ret,可以省去对head节点是否为空以及head节点是否为要删除节点的单独考虑
while(p->next) {
if (p->next->val == val) {
q = p->next;
p->next = q->next;
free(q);
} else {
p = p->next;
}
}
return ret.next;
}