LeetCode203 删除单链表中值等于val的结点

来源:互联网 发布:淘宝店是怎么打广告的 编辑:程序博客网 时间:2024/06/06 03:41

题解:首先找到单链表中第一个值为非val的结点,作为新的头结点,然后再从这个结点开始,找下一个值为非val的结点作为新的头结点的下一个结点,如此依次进行。

代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* removeElements(ListNode* head, int val) {    //大于等于两个结点    ListNode* p = head;    ListNode* pe;    //找到第一个值不为val的结点    while (p&&p->val == val) {    pe = p->next;    p->next = NULL;    p = pe;    }    if (!p){    return NULL;    }    ListNode* head2 = p;    ListNode* pre;    while (p){    pre = p->next;    while (pre&&pre->val == val){    pre = pre->next;    }    p->next = pre;    p = pre;    }    return head2;    }};
第二种思路就是定义一个带头节点的链表,然后

struct ListNode fakehead, *current;fakehead.next = head;current = &fakehead;while (current->next != NULL) {    if (current->next->val == val) {        struct ListNode *del_node = current->next;        current->next = current->next->next;        free(del_node);    }    else {        current = current->next;    }}return fakehead.next;}


0 0
原创粉丝点击