链表的基础知识
1.空间中为不连续存储,节点与节点间通过next链接

2.需提前定义结构体初始化链表
题目描述

1.在原链表基础上直接删除
思路:使用两个指针,前面的一个指针找到目标元素后,让后面一个指针与前面的前面的建立联系

代码:
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* pNext=head;
struct ListNode* pCurrent;
while(pNext)
{
if(pNext->val==val)
{
if(pNext==head)
{
head=head->next;
}
else
{
pNext=pNext->next;
pCurrent->next=pNext;
}
}
else
{
pCurrent=pNext;
pNext=pNext->next;
}
}
return head;
}
2.增加虚拟头节点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val)
{
typedef struct ListNode ListNode;
if(head==NULL)
{
return NULL;
}
ListNode* dummyHead;
dummyHead = (ListNode *)malloc(sizeof(ListNode));//注意给虚拟头节点分配空间。
ListNode* Current=dummyHead;
dummyHead->next=head;
while(Current->next!=NULL)
{
if(Current->next->val==val)
{
Current->next=Current->next->next;
}
else
{
Current=Current->next;
}
}
return dummyHead->next;
}
文章介绍了链表基础知识,包括其不连续的存储特性以及通过next指针连接节点。接着,提出了两种在链表中删除特定值元素的方法:一是直接在原链表上操作,使用两个指针定位并删除;二是通过增加虚拟头节点,简化删除过程。两种方法都涉及指针更新和链表结构的调整。

被折叠的 条评论
为什么被折叠?



