?203. 移除鏈表元素 - 力扣(LeetCode)
思路:這個題可以直接在原鏈表上進行修改,但是修改鏈表的指向是有點麻煩的,所以我們給兩個指針,phead和ptail,這是新鏈表的兩個指針,再給一個指針pcur來遍歷原鏈表,如果原鏈表中不為val就尾插到新鏈表中,有個細節點要注意的是,就是在為即ptail這個位置上,如果ptail本來就位NULL了,你再一次置為NULL就會報錯,但有的測試用例來說,如果原鏈表中倒數第二個節點不為val,倒數第一個節點為val,這個時候如果你不把新鏈表的尾的next置為NULL,就會出錯。?
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {ListNode* phead,*ptail;phead=NULL,ptail=NULL;ListNode* pcur=head;while(pcur){if(pcur->val!=val){if(phead){ptail->next=pcur;ptail=ptail->next;}else {phead=ptail=pcur;}}pcur=pcur->next;}if(ptail){ptail->next=NULL;}return phead;
}
?