码迷,mamicode.com
首页 > 其他好文 > 详细

Remove Linked List Elements

时间:2015-05-03 19:05:47      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:链表删除

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;
} 



Remove Linked List Elements

标签:链表删除

原文地址:http://blog.csdn.net/bruce_teng2011/article/details/45460265

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!