203. 移除链表元素
删除链表中等于给定值 val 的所有节点。
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
var removeElements = function(head, val) {
let newHead = new ListNode() //在头部建一个空节点,while循环只需要考虑对下一个节点的处理
newHead.next = head
let pre = newHead
let cur = head
while(cur){
if(cur.val === val){
pre.next = cur.next //找到目标节点了,转移到下下个节点
}else {
pre = cur
}
cur = cur.next //不管找没找到,当前节点都需要后移
}
return newHead.next
};
24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
给定 1->2->3->4, 你应该返回 2->1->4->3.
var swapPairs = function(head) {
if(!head) return null
return change(head)||head
function change(node){
let tempNext = node.next
if(tempNext){
let tempNextNext = node.next.next
node.next.next = node
if(tempNextNext){
node.next = change(tempNextNext)
}else {
node.next = null
}
}
return tempNext || node
}
};
反转单向链表
function reverse(head) {
if (!head || !head.next) return head;
let pre = null;
let cur = head;
let next;
while (cur) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}