算法培训(三)---链表相关操作

链表相关操作

1.删除指定节点,时间复杂度为O(1)

问题描述:删除链表指定的节点,链表如下:

1->2->3->4>5;

删除第三个节点:

1->2->4->5;

问题分析:

删除指定位置的节点,时间复杂度不超过O(1),将指定节点的下一个节点的值覆盖掉指定节点的值,然后再将这指定节点的next指向它的next的next。

代码实现:

节点实现:

public class List {
	public int value;
	public List next=null;
	public List(int value)
	{
		this.value = value;
		this.next =null;
	}
	
}

创建链表:

public static List ListCreat(String list) {
	list.trim();
	if(list.length()==0)
		return null;
	String[] value =list.split(",");
	String item = value[0]; 
	List phead = new List(Integer.parseInt(item));
	List p = phead;
	for(int i = 1;i < value.length;i++){
		List q = new List(Integer.parseInt(value[i]));
		p.next = q;
		p = p.next;
	}
	return phead;
}

删除操作:

public static void delete(int i,List head)//链表删除
{
	List p = head;
	for(int j=1;j<i;j++) {
		p = p.next;
	}
	if(p.next==null)
	{
		p=p.next;
	}
	else {
		p.value = p.next.value;
		p.next = p.next.next;
	}
}

2.链表逆置

问题描述:

将链表就地逆置

问题分析:

定义三个指针,一个是头指针head,一个指针q指null,另一个指针p指向头指针的下一个节点。q指针一开始指null是为了方便后续操作。操作过程中不要将链表的位置信息丢失。

代码实现:

public static List inverion(List head) {//链表反转 
	List q = null;
	List p = head.next;
	head.next = q;
	while(p!=null) {
		q = p;
		p = p.next;
		q.next = head;
		head = q;
	}
	return head;
}

3.判断是否为回文链表

问题分析:

利用栈的存储结构可以实现。判断出栈的节点的value是否与遍历链表的值一一对应。

代码实现:

public static void Palindrome(List head) {//回文判断
	Stack<List> stack = new <List>Stack();
	List p = head;
	while(p!=null) {
		stack.push(p);
		p = p.next;
	}
	int flag = 0;
	List t = head;
	while(t!=null) {
		List q  = stack.pop();
		if(q.value!=t.value) {
			 flag = 1;
		}
		t = t.next;
	}
	if(flag == 1)
	{
		System.out.println("NO");
	}else {
		System.out.println("Yes");
	}	
}

4 判断链表里是否存在环

问题分析:

定义两个指针,一个指针p1的步长为2,另一个p2步长为1,如果链表中存在环,则两个指针一定会相遇。相遇时结束循环,若不存在环,则循环结束的条件是p1或p2为空的时候。

代码实现:

public static void Circle(List head) {
	List p1 = head;
	List p2 = head;
	int flag = 0;
	while(p1!=null&&p2!=null) {
		p1 = p1.next;
		p2 = p2.next.next;
		if(p1==p2) {
			flag = 1;
			System.out.println("YES");
			break;
		}
	}
	if(flag==0)
	System.out.println("NO");
}
本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架开发的疫情居家办公系统。该系统旨在为居家办公的员工提供一个高效、便捷的工作环境,同时帮助企业更好地管理远程工作流程。项目包含了完整的数据库设计、前后端代码实现以及详细的文档说明,非常适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 系统的核心功能包括用户管理、任务分配、进度跟踪、文件共享和在线沟通等。用户管理模块允许管理员创建和管理用户账户,分配不同的权限。任务分配模块使项目经理能够轻松地分配任务给团队成员,并设置截止日期。进度跟踪模块允许员工实时更新他们的工作状态,确保项目按计划进行。文件共享模块提供了一个安全的平台,让团队成员可以共享和协作处理文档。在线沟通模块则支持即时消息和视频会议,以增强团队之间的沟通效率。 技术栈方面,后端采用了Spring框架来管理业务逻辑,SpringMVC用于构建Web应用程序,MyBatis作为ORM框架简化数据库操作。前端则使用Vue.js来实现动态用户界面,搭配Vue Router进行页面导航,以及Vuex进行状态管理。数据库选用MySQL,确保数据的安全性和可靠性。 该项目不仅提供了一个完整的技术实现示例,还为开发者留下了扩展和改进的空间,可以根据实际需求添加新功能或优化现有功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值