//返回值有3种情况,空,头结点,非头结点。 struct ListNode* deleteNode(struct ListNode* head, int val ) { if(head == NULL) return NULL; //空链表找个毛线 if(head->val == val) return head->next; //返回的是非头结点的情况 struct ListNode* pre = head; struct ListNode* p = head->next; while(p != NULL){ if(p->val != val){ pre = p; //先移动前驱 p = p->next; //再移动工作结点,否则会断链 } else{ //找到要找的元素,就跳过该结点,结束 pre->next = pre->next->next; break; } } return head; }