单链表类题目(js版)

本文介绍了四个JavaScript实现的单链表算法问题:合并两个有序链表、判断环形链表、找到链表中间节点以及删除倒数第k个元素。每个问题都提供了思路解析和相应的代码实现,强调了双指针在解决这类问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

合并两个有序单链表:

​ 题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/

​ 思路:比较两个链表的值,将值较小的加入到结果链表中

​ 代码:


var mergeTwoLists = function(list1, list2) {

if(list1===null) {

return list2

}

if(list2===null) {

return list1

}

if(list1.val<list2.val) {

list1.next = mergeTwoLists(list1.next,list2)

return list1

}

else {

list2.next = mergeTwoLists(list1,list2.next)

return list2

}

};

环形链表

​ 题目地址:https://leetcode-cn.com/problems/linked-list-cycle/

​ 思路:通过快慢指针进行判断,快指针一次走两步,慢指针一次走一步,若链表中存在环,则两指针一定会有重合的时候

​ 代码:


var hasCycle = function(head) {

	let left = head

	let right = head

	while(right!=null&&right.next!=null) {

		left = left.next

		right = right.next.next

		if(left==right) {

			return true

		}

	}

	return false

	};

链表的中间节点

​ 题目地址: https://leetcode-cn.com/problems/middle-of-the-linked-list/

​ 思路: 通过快慢指针进行判断,指针运动方式 慢指针一次一步 快指针一次两步 这样当快指针到达尾部时,慢指针所在的位置就是链表的中点

​ 代码


	var middleNode = function(head) {

	let slow = head

	let fast = head

	while(fast&&fast.next) {

		fast = fast.next.next

		slow = slow.next

	}

	return slow

	};

删除单链表的倒数第k个元素

​ 题目地址:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

​ 思路: 也是通过快慢指针;要删除倒数第k个元素即要从前向后走 n-k 步 (n为链表长度) 让两指针相距k,当快指针走到最后时,慢指针的next即为倒数第k个元素

​ 代码:


	var removeNthFromEnd = function (head, n) {

	var left = head

	var right = head

	while(n>0) {

		right = right.next

		n--

	}

	if(!right) return head.next

	while(right&&right.next) {

		left = left.next

		right = right.next

	}

	left.next = left.next.next

	return head

};

这些都是比较经典的单链表相关的问题,大部分题目都是使用双指针去解决的;在做题时一定要灵活运用双指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值