题目链接
题目描述(Description)
Remove Linked List Elements
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
移除链表元素
给定一个整数,要求从链表中移除包含这个整数的所有结点。
例如:
给定链表和值:1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
返回:1 --> 2 --> 3 --> 4 --> 5
分析(Analysis)
这题并不难。起初我考虑到头结点是否需要删去的问题,把问题分为了两部分解决。后来,看了网上的思路,有更好的办法可以把所有问题归为一类,那就是在头结点之前假定一个空闲结点newhead
,然后把newhead->next
指向head
即可。最后返回newhead->next
。
代码(Code)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* newhead=new ListNode(-1);
ListNode* pre=newhead;
ListNode* cur=head;
newhead->next=head;
while(cur){
if(cur->val==val){
cur=cur->next;
pre->next=cur;
}
else{
pre=cur;
cur=cur->next;
}
}
return newhead->next;
}
};