首先阅读题目,题目会给一个值val,如果遇到这个值,就删除它,给出思路:
1.将struct ListNode 重命名为LSTNode,方便后面编写
2.创建一个新链表,如果上面链表的值不是val,就移到下面来
3.创建一个指针pcur,遍历原链表
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode LSTNode;//重命名方便表达
struct ListNode* removeElements(struct ListNode* head, int val)
{
LSTNode* newhead,*newtail;//创建新链表
newhead=newtail=NULL;
LSTNode*pcur=head;
while(pcur)//遍历数组
{
if(pcur->val!=val)//如果不是要删除的值,准备移下来
{
if(newtail==NULL)//如果是一开始没有节点
{
newhead=newtail=pcur;
}
else//已经有节点了
{
newtail->next=pcur;
newtail=newtail->next;
}
}
pcur=pcur->next;
}
if(newtail)
{
newtail->next=NULL;//防止野指针
}
return newhead;//返回头结点
}