一、思路
简单的链表删除问题。
找到需要删除的元素节点,将其前项节点指向其后向节点即可。需要注意删除的节点在第一个的情况,这里我引入了一个头结点。
PS:其实有种“不要脸”的做法,就是把链表存入数组,在数组中删除,在依次将数组串成链表,由于是练习,就不这么做了(狗头)。
二、代码
1.python
代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeElements(self, head, val) :
p = ListNode()
q = ListNode()
q = head
p.next = q
head = p
while q:
if q.val == val:
p.next = q.next
q = p.next
else:
p = p.next
q = q.next
return head.next
2.C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode *p = new ListNode(0),*q = new ListNode(0);
q = head;
p->next = q;
head = p;
while(q){
if(q->val == val){
p->next = q->next;
q = p->next;
}
else{
p = p->next;
q = q->next;
}
}
return head->next;
}
};