Remove all elements from a linked list of integers that have value val.
删除链表中值为val的所有元素
Example:
Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5
Solution:
Python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
dummy = ListNode(-1) #创建一个辅助头结点
dummy.next = head
temp = dummy #用一个指针来对链表进行遍历
while temp != None and temp.next != None:
if temp.next.val == val: #如果链表中元素的值为val,则修改其前面节点的next指针越过val值元素,指向后面的节点
temp.next = temp.next.next
else:
temp = temp.next #如果链表中元素的值不为val,则指针向后遍历
return dummy.next
C++代码与Python原理相同
C++
/**
* 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 *dummy = new ListNode(-1);
dummy->next = head;
ListNode *temp = dummy;
while (temp && temp->next){
if (temp->next->val == val){
temp->next = temp->next->next;
}
else{
temp = temp->next;
}
}
return dummy->next;
}
};