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

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

时间: 2024-10-27 05:29:16

生成单向链表 并删除链表中某个元素的相关文章

删除数组中某个元素

需求:已知一个数组,删除其中某个元素,其它向左移,最后一位补null值 分析: 1.找出要删除元素的下标,找个变量接收 2.此位置元素后面的元素依次向左移一位 3.补齐最后一位赋值null 4.输出新数组 /** * */ package com.cn.u4; /** * @author Administrator *删除数组中某个元素值 */ public class DelArray { public static void main(String[] args) { //定义数组 Stri

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

python 删除list中重复元素

list = [1,1,3,4,6,3,7] 1. for s in list: if list.count(s) >1: list.remove(s) 2. list2=[] for s in list: if s not in list2: list2.append(s) print list2 3. list2=[] for s in list: list2.append(s) print list2 python 删除list中重复元素

如何正确遍历删除List中的元素

遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合条件的一个元素 3.通过普通的for删除删除符合条件的多个元素 4.通过Iterator进行遍历删除符合条件的多个元素 /** * 使用增强的for循环 * 在循环过程中从List中删除元素以后,继续循环List时会报ConcurrentModificationException */ public

删除数组中某元素,返回含有剩余元素的数组

arr为删除前的数组,key为要删除的元素对象.//删除数组中某元素,返回含有剩余元素的数组------------------------------------function arrMove(arr, key){ var temp = []; for (var i=0; i<arr.length; i++) { if (arr[i] != key) { temp.push(arr[i]); } } return temp;}

js删除数组中的元素

js删除数组中的元素delete和splice的区别 例如有一个数组是 :var textArr = ['a','b','c','d']; 这时我想删除这个数组中的b元素: 方法一:delete 删除数组 delete textArr[1] 结果为: ["a",undefined,"c","d"] 只是被删除的元素变成了 undefined 其他的元素的键值还是不变. 方法二:aplice 删除数组 splice(index,len,[item]

删除数组中的元素(链表)

[问题描述] 给定N个整数,将这些整数中与M相等的删除 假定给出的整数序列为:1,3,3,0,-3,5,6,8,3,10,22,-1,3,5,11,20,100,3,9,3 应该将其放在一个链表中,链表长度为20 要删除的数是3,删除以后,链表中只剩14个元素:1 0 -3 5 6 8 10 22 -1 5 11 20 100 9 [输入] 包含3行:第一行是一个整数n(1 <= n <= 200000),代表数组中元素的个数.第二行包含n个整数,代表数组中的n个元素.每个整数之间用空格分隔:

剑指Offer(链表)-删除链表中重复的节点

(删除链表中重复的节点)题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题思路:这里的重复的节点不保留是将只要重复了的节点都要删除掉,所以考虑利用哈希set的方法,先进行重复性的判断,将重复的元素加入到哈希set中去,然后将重复的元素删除. 利用到了两个指针pre和cur,来表示前一个节点和当前节点. /* public

链表问题----删除链表的中间节点和a/b处的节点

删除链表的中间节点和a/b处的节点 对于给定一个链表的头节点head,实现删除链表的中间节点的函数. 例如 不删除任何节点: 1->2,删除节点1 1->2->3,删除节点2 1->2->3->4,删除节点2 1->2->3->4->5,删除节点3 如果将本问题复杂一下,给定链表的头节点head.整数a和整数b,实现删除位于a/b处节点的函数. 例如 链表:1->2->3->4->5,假设 a/b 的值为r 如果 r 等于

删除列表中的元素

1.删除指定下标的元素 >>> a = [1,2,3,4,5]>>> del a[2] >>> a [1, 2, 4, 5] del容易犯的错误 >>> a = [1,2,3,4,5] >>> b = del a[2] 不能直接将删除的赋值给另一个变量 File "<stdin>", line 1 b = del a[2] ^ SyntaxError: invalid syntax &