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
题意:
删除给定的节点
解题思路:
1.考虑头结点等于给定节点并需要删除的情况,此时头结点指针需要向前移动。
2.考虑中间节点等于给定值并需要删除的情况,此时删除该节点并释放资源,同时节点指针移动到下一个节点。
实现代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode *p,*p1,*temp;
if(head == NULL) return head;
p = head;
while(p != NULL && p->val == val){//当头结点值==val的情况
temp = p;
p = p->next;
temp = NULL;
}
p1 = p;
head = p;//保留头结点指针
while(p != NULL){//当链表中有值==val的情况
if(p->val == val){
temp = p;
p1->next = p->next;
p = p->next;
temp = NULL;
}else{
p1 = p;
p = p->next;
}
}
return head;
}