每日一题
移除链表元素
题目链接
思路
- 这道删除链表元素的题比较简单,考察的就是对链表节点的基本操作。
- 我们可以定义一个指针cur指向链表的头,用cur来遍历整个链表,当出现链表元素等于val时,就将这个节点删去,最后再返回头结点就可以了
- 但有一种情况需要我们考虑:这是一个没有哨兵位的单链表,所以如果我们的头节点的数据恰好等于val,那么我们就要将头结点也删除,那头结点都删了,我们返回什么呢,换一种说法就是我们怎么确定新表的头呢?为了解决这一问题,我们可以新建一个表头newhead来指向原来的表,这样,就算我们删除了原来的表头,最后我们返回时将newhead→next返回就行了
实现代码
struct ListNode* removeElements(struct ListNode* head, int val){
if(head == NULL)
return NULL;
struct ListNode * newhaed = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode * cur = newhaed;
newhaed->next = head;
while(cur->next != NULL)
{
if(cur->next->val == val)
{
struct ListNode* temp = cur->next;
cur->next = cur->next->next;
free(temp);
}
else
cur = cur->next;
}
return newhaed->next;
}