示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解题思路:
构造一个有头的单向链表,定义cur遍历链表,当cur指向要删除的元素,free就行,反之将该节点链到新的链表上,由于不知道最后一个是不是要删除的元素还是要保留的元素,所以每次要将newtail->next置为NULL;最后删除头结点。
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val){
ListNode* newhead = (ListNode*)malloc(sizeof(ListNode));
newhead->next = NULL;
ListNode* newtail = newhead;
ListNode* cur = head;
while(cur)
{
ListNode* next = cur->next;
if(cur->val == val)
{
free(cur);
}
else
{
newtail->next = cur;
//更新尾的位置
newtail = cur;
//每次指向NULL
newtail->next = NULL;
}
cur = next;
}
ListNode* list = newhead->next;
free(newhead);
return list;
}