题目如下:
思路1:创建一个新的带头链表 (newhead),遍历头结点对应的值分别于x进行比较,将不等于x的节点尾插到新的带头链表中,返回新的带头链表的下一个节点。
代码如下:
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
ListNode* newhead, * newtail;
newhead = newtail = (ListNode*)malloc(sizeof(ListNode));
while (head)
{
if (head->val != val)
{
newtail->next = head;
head = head->next;
newtail = newtail->next;
}
else {
head = head->next;
}
}
newtail->next = NULL;
return newhead->next;
}
思路2:与思路一类似,只不过是空链表,进行判断。
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
if (head == NULL)
{
return NULL;
}
// 创建空链表
ListNode* newhead, * newtail;
newhead = newtail = NULL;
while (head) {
if (head->val != val) {
// 空链表
if (newhead == NULL) {
newtail = newhead = head;
}
else {
// 非空链表
newtail->next = head;
newtail = newtail->next;
}
}
head = head->next;
}
if (newtail)
newtail->next = NULL;
return newhead;
}