LEETCODE-Remove Linked List Elements

来源:互联网 发布:网络女主播真实收入 编辑:程序博客网 时间:2024/06/05 11:41

在写之前,我想说的是;
大学里的数据结构教材中的link list与LEETCODE中的结构不一样;
数据结构这本教材中的链表是有头指针的即:第一个值为head->next;
在LEETCODE中链表是没有头指针的即:第一个值为head(head即指向第一个元素);
//—————————————————————–//
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
//—————————————————————//
思路:如果链表不为空先找到第一个值不等于val的元素,head就停留在这个位置不变以便以后返回用,再定义 p , q 两个指针,在相互作用下提出剩余部分中值等于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) {    if (head == NULL)        return head;    while(head->val == val) {          head = head->next;          if (head == NULL)              return head;    }    ListNode *p = head;    ListNode *q = p->next;    if (q == NULL)        return head;    while (q != NULL) {        if (p->next->val == val)        {            p->next = q->next;            q = q->next;        }        else        {            p = q;            q = q->next;        }    }    return head;    }};
0 0
原创粉丝点击