Leetcode算法题(移除链表中的元素)
题目如下:
思路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;
}
原文地址:https://blog.csdn.net/braveact/article/details/140450044
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!