删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
首先分两种情况讨论
① 节点为空
这种情况可以直接返回NULL;
② 节点不为空
当节点不为空时,为了便于分析,可以首先分析头结点后面的元素,即while(LN->next){},因为这样可以便于对节点进行删除(便于控制指针的指向)。
然后,在最后对head节点进行判断,即if(head){}。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
typedef struct ListNode * LinkNode;
LinkNode LN = head;
if(LN == NULL) return NULL;
while(LN->next){
LinkNode LNN = LN->next;
if(LNN->val == val){
LN->next = LNN->next;
free(LNN);
}else{
LN = LNN;
}
}
if(head){//在最后对head节点进行判断,可以比较方便
if(head->val == val) return head->next;
}
return head;
}