LeetCode【203.移除链表的元素】
题目描述:
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
思路:
1.得有一个节点prev记录被删除节点的前驱节点,还得有一个节点next记录被删除节点的后继结点。
2.要先判断链表是否为空,为空则返回NULL,不为空则继续执行下面的代码。
代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
if(head == NULL)
return NULL;
struct ListNode* cur = head;
struct ListNode* prev = NULL;
while(cur)
{
if(cur->val == val)
{
struct ListNode* next = cur->next;
if(prev == NULL)
{
head = cur->next;//把头结点放到cur的后继结点(第一个结点值就是给的val)
}
else//链接
{
prev->next = cur->next;
}
free(cur);//删除
cur = next;
}
else//迭代
{
prev = cur;
cur = cur->next;
}
}
return head;
}
环境:
C语言
图片分析: