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

生成单向链表 并删除链表中某个元素

时间:2015-04-24 10:37:01      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

leetcode 题目描述:

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

生成链表


若输入元素不为0,则加入到链表尾部,若为0,不加入,且生成链表工作完成。代码如下:
ListNode * Creat_list()
{
	ListNode *p,*head,*s;
	head=(ListNode*)malloc(sizeof(ListNode));
	p=head;
	int flag=1;
	int x;
	while (flag)
	{
		cin>>x;
		if (x!=0)
		{
			s=(ListNode*)malloc(sizeof(ListNode));
			s->val=x;
			p->next=s;
			p=s;
		}
		else
			flag=0;
	}
	p->next=NULL;
	head=head->next;
	return head;
}

从链表中删除某元素

代码如下:
ListNode* removeElements(ListNode* head, int val) 
{
	if (head==NULL) return head;
	ListNode *p,*s;
	p=head;
	while(p!=NULL)
	{
		while(val!=p->val&&p->next!=NULL)
		{
			s=p;
			p=p->next;
		}
		if (val==p->val)
		{
			if (val==head->val)
			{
				head=head->next;
			}
			else
			{
				s->next=p->next;
			}
		}
		p=p->next;
	}
	return head;
}


完整代码如下:

#include <iostream>
using namespace std;

struct ListNode {
	    int val;
        ListNode *next;
        ListNode(int x) : val(x), next(NULL) {}
	};
ListNode * Creat_list();
ListNode* removeElements(ListNode* head, int val) ;
void main()
{
	ListNode *head,*head1,*p;
	head=Creat_list();
	p=head;
	while(p)
	{
		cout<<p->val<<" ";
		p=p->next;
	}
	cout<<endl;
	head1=removeElements(head, 6);
	p=head1;
	while(p)
	{
		cout<<p->val<<" ";
		p=p->next;
	}
	cout<<endl;
}

ListNode * Creat_list()
{
	ListNode *p,*head,*s;
	head=(ListNode*)malloc(sizeof(ListNode));
	p=head;
	int flag=1;
	int x;
	while (flag)
	{
		cin>>x;
		if (x!=0)
		{
			s=(ListNode*)malloc(sizeof(ListNode));
			s->val=x;
			p->next=s;
			p=s;
		}
		else
			flag=0;
	}
	p->next=NULL;
	head=head->next;
	return head;
}
ListNode* removeElements(ListNode* head, int val) 
{
	if (head==NULL) return head;
	ListNode *p,*s;
	p=head;
	while(p!=NULL)
	{
		while(val!=p->val&&p->next!=NULL)
		{
			s=p;
			p=p->next;
		}
		if (val==p->val)
		{
			if (val==head->val)
			{
				head=head->next;
			}
			else
			{
				s->next=p->next;
			}
		}
		p=p->next;
	}
	return head;
}

运行结果如下:
技术分享

即生成链表为6-1-2-3-6-7-8-9-6,删除其中值为6的节点,得到结果为 1-2-3-7-8-9

生成单向链表 并删除链表中某个元素

标签:

原文地址:http://blog.csdn.net/sinat_24520925/article/details/45242769

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