LeetCode | 203. 移除链表元素
- 这个题我们有两个思路,我们先来看第一个思路~~
思路一:
- 当cur不等于6就一直找,找到了
6
就删除,但是能不能直接删除?不能,直接free了就找不到下一个了 - 这个时候我们就要定义
next
指针,和prev
指针,next
指针保存cur
的下一个地址,prev
保存cur
的前一个地址
代码如下:
struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode* prev = NULL; struct ListNode* cur=head; while(cur != NULL) { if(cur->val == val) { struct ListNode* next = cur->next; free(cur); if(prev) prev->next = next; else head = next; cur = next; } else { prev = cur; cur = cur->next; } } return head; }
思路二:
- 遍历链表
- 把不是val的节点,尾插到新链表
代码如下:
struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode* newHead,*newTail; newHead = newTail = NULL; struct ListNode* pcur = head; while(pcur) { if(pcur->val != val) { if(newHead == NULL) { newHead = newTail = pcur; } else { newTail->next = pcur; newTail = newTail->next; } } pcur = pcur->next; } if(newTail != NULL) newTail->next = NULL; return newHead; }