题目链接
https://leetcode.com/problems/remove-linked-list-elements/
知识点:
考察链表中删除指定元素相关知识
思路:
1.常规思路,注意判断头结点的值是val的情况
2.构造一个虚拟头节点代替原先头结点,原先头结点变为第二个元素
代码:
1.
class Solution
{
public:
ListNode* removeElements(ListNode* head, int val)
{
while(head != NULL&&head->val == val )
{
ListNode* delNode = head;
head = delNode->next;
delete delNode;
}
if(head == NULL)
return NULL;
ListNode* curNode = head;
while(curNode->next!=NULL)
{
if(curNode->next->val==val)
{
ListNode* delNode = curNode->next;
curNode->next = delNode->next;
delete delNode;
}
else
curNode=curNode->next;
}
return head;
}
};
class Solution
{
public:
ListNode* removeElements(ListNode* head, int val)
{
ListNode* dummyhead = new ListNode(0);
dummyhead->next = head;
ListNode* curNode = dummyhead;
while(curNode->next!=NULL)
{
if(curNode->next->val==val)
{
ListNode* delNode = curNode->next;
curNode->next = delNode->next;
delete delNode;
}
else
curNode=curNode->next;
}
ListNode* retNode = dummyhead->next;
delete dummyhead;
return retNode;
}
};
AC代码及测试如下:
#include <bits/stdc++.h>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* createLinkedList(int arr[], int n)
{
if(n == 0)
return NULL;
ListNode* head = new ListNode(arr[0]);
ListNode* curNode = head;
for(int i=1; i<n; i++)
{
curNode->next = new ListNode(arr[i]);
curNode = curNode->next;
}
return head;
}
void printLinkedList(ListNode* head)
{
ListNode* curNode = head;
while(curNode!=NULL)
{
cout<<curNode->val<<" -> ";
curNode = curNode->next;
}
cout<<"NULL"<<endl;
}
void deleteLinkedList(ListNode* head)
{
ListNode* curNode = head;
while(curNode!=NULL)
{
ListNode* delNode = curNode;
curNode = curNode->next;
delete delNode;
}
}
class Solution
{
public:
ListNode* removeElements(ListNode* head, int val)
{
ListNode* dummyhead = new ListNode(0);
dummyhead->next = head;
ListNode* curNode = dummyhead;
while(curNode->next!=NULL)
{
if(curNode->next->val==val)
{
ListNode* delNode = curNode->next;
curNode->next = delNode->next;
delete delNode;
}
else
curNode=curNode->next;
}
ListNode* retNode = dummyhead->next;
delete dummyhead;
return retNode;
}
};
int main()
{
int arr[]= {3,1,2,3,4,5};
int n = sizeof(arr)/sizeof(int);
ListNode* head = createLinkedList(arr,n);
printLinkedList(head);
ListNode* head1 = Solution().removeElements(head,3);
printLinkedList(head1);
deleteLinkedList(head1);
return 0;
}
输出: