标签:链表删除
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
此题的解法在与维护两个指针。p和q,p指向当前合法的元素,q指向下一个可能合法的元素,注意是可能合法的。
p初始化为list第一个合法的元素,q的初始化为q = p->next,将q遍历list,如果当前元素合法,则p和q都向后移动,如果当前元素不合法,则p->next=q->next,跳过这个不合法的元素。注意只有在元素合法的时候才移动p。
#include<cstdio> using namespace std; struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(NULL){ } }; ListNode* removeElements(ListNode *head, int val){ //p指向list中第一个合法的元素 ListNode *p = head; while(p && p->val == val){ p = p->next; } if(p == NULL){ return NULL; } ListNode *q = p->next; head = p; //新的head指针 //用q去遍历整个list while(q != NULL){ if(q->val == val){ //q指向的元素要被删除 p->next = q->next; q = q->next; //q继续向前移动 } else { //找到了一个合法元素 p = p->next; q = q->next; } } return head; } int main(){ ListNode *p = new ListNode(1); ListNode *q = new ListNode(2); p->next = q; ListNode *head = removeElements(p, 1); printf("%d", head&&head->val); return 1; }
标签:链表删除
原文地址:http://blog.csdn.net/bruce_teng2011/article/details/45460265