代码编织梦想

1.题目:  删除有序链表中重复的元素

描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次  重点有序 
例如:
给出的链表为1→1→2,返回1→2.
给出的链表为1→1→2→3→3,返回1→2→3.

数据范围:链表长度满足 1000≤n≤100,链表中任意节点的值满足 100∣val∣≤100
进阶:空间复杂度 O(1),时间复杂度 O(n)


2.算法:暴力算法


3.算法思路:

当前节点的数据,与下一个节点的数据对比  , 假如相同  ,  当前 节点连接 下一个节点的下一个节点  , 当前节点 后面那个节点 销毁!


4.代码:

/*************************************************
作者:She001
时间:2022/10/3
题目:  删除有序链表中重复的元素-I
描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次  重点有序 
例如:
给出的链表为1→1→2,返回1→2.
给出的链表为1→1→2→3→3,返回1→2→3.

数据范围:链表长度满足 1000≤n≤100,链表中任意节点的值满足 100∣val∣≤100
进阶:空间复杂度 O(1),时间复杂度 O(n)



***************************************************/
//算法:
//1.暴力算法:数据有序  从大到小  


#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
	int i;
	node *next;	
}; 


void print(node * head)//打印链表 
{
	node* pp= head;//复制头节点 
	while(pp!=NULL)//判断这个节点是否为空  链表是否结束 
	{
		cout<<pp->i<<"  ";
		pp=pp->next;//指向下一个 
	}
	cout<<endl;
	
}



int lianbiao_num(node * head)//函数的作用 返回链表的个数
{
	int i=0;
	node* pp=head;
	while(pp!=NULL)
	{
		i++;
		pp=pp->next;	
	}
	//cout<<"链表中节点的个数: "<<i<<endl;
	return i;	
} 


node * reverseList(node* head)//翻转链表 
{
	if(head==NULL)
	{
		return NULL;	
	}	
	node * a = head;
	node * b = NULL;
	while(a!=NULL)
	{
		node * c = a->next;
		a->next=b;
		b=a;
		a=c;
	}
	return b;	
} 


//1.暴力算法:
//
node *  fangfa_1(node * head)
{
	if(head==NULL ||  head->next==NULL)//假如链表为空  或者只有一个节点  那么我们直接返回头节点 
	{
		return head;
	}
	node * k1= head;
	while(k1!=NULL  &&  k1->next!=NULL)//遍历节点 
	{
		if((k1->i)==(k1->next->i))//判断数据是相同 
		{
			node * kk=k1->next;//记录节点 
			k1->next=k1->next->next;//建立连接 
			k1=k1->next;//数据相同   节点 变为下一个的下一个 
			delete kk;//释放节点 
		}	
		else
		{
			k1=k1->next;//遍历下一个节点 
		}
	}
	return head;
}





int main()
{
	
	
	//建立  第一个 单链表  
	node *a1=new node;
	node *a2=new node;
	node *a3=new node;
	node *a4=new node;
	node *a5=new node;
	node *a6=new node;
	node *a7=new node;
	node *a8=new node;
	node *a9=new node; 
	
	a1->i=1;//链表节点的复制 
	a2->i=1;
	a3->i=2;
	a4->i=3;
	a5->i=4;
	a6->i=4;
	a7->i=5;
	a8->i=6;
	a9->i=6;
	
	
	a1->next=a2;//链表的连接 
	a2->next=a3;
	a3->next=a4;
	a4->next=a5;
	a5->next=a6;
	a6->next=a7;
	a7->next=a8;
	a8->next=a9;//a5 是 两个链表的节点 
	a9->next=NULL;
	

	node * k1= fangfa_1(a1);
	print(k1);
	
	
	return 	0;
} 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/she666666/article/details/127158223

每日算法题 | 剑指offer 链表专题 (8) 删除链表中重复的结点-爱代码爱编程

点击上方“Jerry的算法和NLP”,选择“星标”公众号       重磅干货,第一时间送达   题目 删除链表中重复的结点 题目要求 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1-&g

牛客面试必考算法题刷题-爱代码爱编程

文章目录 tips设计LRU缓存结构判断链表中是否有环二分查找实现二叉树先序、中序、后序遍历寻找第K大合并有序链表求二叉树的层次遍历括号序列删除列表的倒数第n个节点链表中的节点每k个一组翻转在二叉树中找到两个节点的最近公共祖先节点合并两个有序的数组最长公共子串两数之和子数组的最大累加和问题找到字符串的最长无重复子串🌸最长递增子序列反转字符串螺旋矩阵

字节跳动面试算法题目以及答案-爱代码爱编程

题目来源于牛客 https://www.nowcoder.com/discuss/455003?type=post&order=time&pos=&page=2&channel=-1&source_id=search_post_nctrack 题目以及答案(c++)1. 剑指 Offer 53 - II. 0~n-

华为牛客面试题目汇总-链表篇-爱代码爱编程

总结 首先华为牛客的面试题库是非常leetcode的,它的题目非常的常规,但是真正招实习生的时候,往往不是这么简单,笔试的题目设计的是真正的应用题,在这个时候,如何更好更完整的把题目的含义从中抽象出来才是问题的关键,所以到时候真的需要额外的去准备类似的题目,只是刷leetcode是不够的。 链表 1、反转链表 输入一个链表,反转链表后,输出新

牛客题霸剑指offer单项汇总——链表(共13道)-爱代码爱编程

文章目录 【1】反转链表 相关题目【2】链表中的环 相关题目【3】快慢指针解法 相关题目【4】删除链表的节点 相关题目【5】合并链表 相关题目【6】链表的深拷贝 所有的链表题目都注意要考虑空指针的问题,当节点p=nullptr时,如果使用了p->next或p->val就会出现异常错误,导致代码无法运行 【1】反转链表 相关题目

牛客面试必刷101代码总结-爱代码爱编程

目录 01链表BM1 反转链表BM2 链表内指定区间内反转BM3 链表中的节点每k个一组翻转BM4 合并两个排序的链表BM5 合并k个已排序的链表BM6 判断链表中是否有环BM7 链表中环的入口节点BM8 链表中倒数最后K个节点BM9 删除链表的倒数第n个节点BM10 两个链表的第一个公共节点BM11 链表相加(二)BM12 单链表的排序BM13

链表分割(牛客较难)+环形链表(leetcode简单)-爱代码爱编程

今天还是更新两个关于链表的题 第一个 题目描述: 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 思路: 1.这个题的总体思路就是定义两个带哨兵位的链表,比x大的放到一个链表中,比x小的放到一个链表中,也就是将原链表分割给

tomcat面试和spring的面试题_黄金龙666的博客-爱代码爱编程

Tomcat是什么? tomcat服务器首先是一个开源的服务器,其次他还是一个轻量级,是开发调试的首选; 其次tomcat的端口号默认是8080,它还可以通过tomcat下的conf下的server.xml里的Connec

【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程_清风莫追的博客-爱代码爱编程

个人主页-CSDN:清风莫追 🔥 该专栏作为刷题笔记,持续更新中。 推荐一款面试、刷题神器牛客网:👉开始刷题学习👈 文章目录 1.题目描述2.算法设计思路1)总体思路:2)算法过程:3)遇到问题:

面试算法 牛客题目 单链表的排序__she001的博客-爱代码爱编程

1.题目:   单链表的排序 描述 给定一个节点数为n的无序单链表,对其按升序排序。 数据范围:0 < n \le 1000000<n≤100000 要求:空间复杂度 O(n),时间复杂度 O(nlogn)   2.算法: 1.暴力算法 .数组赋值的方法    2.归并排序(推荐使用) (因为时间复杂度 和空间复杂度  最小) 

【牛客】面试必刷top101——01链表_牛客面试必刷101-爱代码爱编程

BM1 反转链表 描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤n≤1000 要求:空间复杂度 O(1),时间复杂度

【数据结构】必掌握的链表面试题_linked structure was modified.-爱代码爱编程

    我们在学习了链表的有关知识后,有必要来看几个链表的经典面试题,让我们一起来学习一下吧。 目录 1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表的中间节点 4.链表中倒数第k个节点 5.合并两个有序链表 6.链表的回文结构  7.链表分割 8.相交链表 9.环形链表 10.找环形链表开始入环的第一个

java数据结构与算法——链表面试题_java链表面试题-爱代码爱编程

本文为链表相关面试题,每道题均附讲解及对应链接。 一:反转一个单链表。 链接:206. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list/description/ 1.题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

【牛客刷题-爱代码爱编程

个人主页:清风莫追 推荐一款面试、刷题神器牛客网:👉点击加入刷题大军👈 文章目录 1.题目描述2.算法设计思路3.算法实现4.运行结果 1.题目描述 描述 删除给出链表中的重复元素(

牛客面试高频算法题js(矩阵元素查找、括号生成、重排链表、有重复项数字的全排列、加起来和为目标值的组合(二))_给出一组可能包含重复项的数字-爱代码爱编程

NC86 矩阵元素查找 描述 已知一个有序矩阵mat,同时给定矩阵的大小n和m以及需要查找的元素x,且矩阵的行和列都是从小到大有序的。设计查找算法返回所查找元素的二元数组,代表该元素的行号和列号(均从零开始)。保证元素互