在本文中,我们将介绍链表的常见操作,包括翻转链表、判断循环链表和合并两个有序链表,并提供相应的 JavaScript 代码示例。
翻转链表
翻转链表是将链表中的节点顺序反转,即原来的头节点成为新链表的尾节点。以下是翻转链表的 JavaScript 实现代码:
var reverseList = function(head) {
let prev = null;
let curr = head;
while (curr) {
const next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
};
循环链表
判断链表中是否存在环,即链表的尾节点指向链表中的某个节点。以下是判断循环链表的 JavaScript 实现代码:
var hasCycle = function(head) {
let f=head,s=head;
while(f!=null&&f.next!=null){
s=s.next
f=f.next.next
if(s==f) return true
}
return false
};
合并两个有序链表
合并两个有序链表是将两个有序链表合并为一个新的有序链表。以下是合并两个有序链表的 JavaScript 实现代码:
var mergeTwoLists = function(l1, l2) {
//递归的结束条件,如果l1和l2中有一个为空就返回
if (l1 == null || l2 == null) {
return l1 == null ? l2 : l1;
}
//如果l1的值<=l2的值,就继续递归,比较l1.next的值和l2的值
if (l1.val <= l2.val) {
//l1.next和l2比较完后,会产生一个更小的节点x,将x加到当前l1的后面
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
//如果l1的值>l2的值,就继续递归,比较l1的值和l2.next的值
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};
通过学习和理解这些链表操作的实现方法,我们可以更好地应用链表解决实际问题,并提高编程技能水平