删除单链表中的一个元素

题目:

Remove all elements from a linked list of integers that have value val.

Example

Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6

Return: 1 --> 2 --> 3 --> 4 --> 5

Credits:

Special thanks to @mithmatt for adding this problem and creating all test cases.

C代码:

/*struct ListNode
{
     int val;
     struct ListNode *next;
};
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
    if(NULL == head) return head;

    struct ListNode *p=head;
    struct ListNode *pre=NULL; 

    while(NULL != p){
        if(p->val == val){
            struct ListNode *del =p;
            p=p->next;
            if(NULL!= pre){
                pre->next=p;
            }else{
                head=p;
            }
            free(del);
        } else{
            pre=p;
            p=p->next;
        }
    }

    return head;
}
时间: 2024-08-08 13:51:45

删除单链表中的一个元素的相关文章

13.删除单链表中重复的元素

13.删除单链表中重复的元素 思路: 用Hashtable辅助,遍历一遍单链表就能搞定.同高级函数9的原因,我不太会使用C++STL中的hash.而如果使用set集合来存储链表中的所有的值,实际上效率和每次重新遍历单链表是一样的.“用了c++标准库中的set来保存访问过的元素,所以很方便的就可以判断当前节点是否在set集合中,直接使用set提供的find函数就可以了.而且使用set的查找在时间复杂度上比较低.”我不太清楚STL中set集合的实现方式,如果是基于类似hash结构的话,那自然效率O(

009实现一个算法来删除单链表中的一个结点,只给出指向那个结点的指针(keep it up)

呵呵,这个题不能直接删除已知的结点,因为是单链表,不知道前驱,只知道 后继结点,直接删除会使链表断开.不过我们可以删除已知结点的后继结点, 把后继结点的值赋值给已知结点. #include <iostream> struct Node { int data; Node* next; }; bool removeNode(Node* vNode) { if (vNode == NULL || vNode->next == NULL) return false; Node* pNext =

009实现一个算法来删除单链表中的一个结点,仅仅给出指向那个结点的指针(keep it up)

呵呵,这个题不能直接删除已知的结点.由于是单链表,不知道前驱,仅仅知道 后继结点,直接删除会使链表断开.只是我们能够删除已知结点的后继结点, 把后继结点的值赋值给已知结点. #include <iostream> struct Node { int data; Node* next; }; bool removeNode(Node* vNode) { if (vNode == NULL || vNode->next == NULL) return false; Node* pNext =

【LeetCode-面试算法经典-Java实现】【203-Remove Linked List Elements(删除单链表中的元素)】

[203-Remove Linked List Elements(删除单链表中的元素)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 代码下载[https://github.com/Wang-Jun-Chao] 原题 Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5

Leetcode(无重复字符的最长子串;删除排序链表中的重复元素II;加一;最后一个单词的长度;相同的树)

1.无重复字符的最长子串 这题需要用到滑动窗口法,有许多问题都可以考虑使用滑动窗口法:https://www.geeksforgeeks.org/tag/sliding-window/ 因为用c++,所以用到set容器:std::count 2.删除排序链表中的重复元素II 3.加一 1 class Solution { 2 public: 3 vector<int> plusOne(vector<int>& digits) { 4 int n=digits.size()-

cc150:实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针

实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针. 例子: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不需要返回什么,得到一个新链表:a->b->d->e 解答 这个问题的关键是你只有一个指向要删除结点的指针,如果直接删除它,这条链表就断了. 但你又没办法得到该结点之前结点的指针,是的,它连头结点也不提供.在这种情况下, 你只能另觅他径.重新审视一下这个问题,我们只能获得从c结点开始后的指针, 如果让你删除c结点后的某个结点,那

删除单链表中重复的值(Java版)

题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个) 解题思路: 用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的next指向该结点的next指针,删除该结点元素,否则令p指向p的next指针,并将当前访问的节点元素的值依次放入辅

cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针

实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a->b->d->e 解答 这个问题的关键是你仅仅有一个指向要删除结点的指针,假设直接删除它,这条链表就断了. 但你又没办法得到该结点之前结点的指针,是的,它连头结点也不提供.在这样的情况下, 你仅仅能另觅他径.又一次审视一下这个问题,我们仅仅能获得从c结点開始后的指针, 假设让你删除c结点后的

删除单链表中重复的值

题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个) 解题思路: 用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的next指向该结点的next指针,删除该结点元素,否则令p指向p的next指针,并将当前访问的节点元素的值依次放入辅