数据结构-链表

链表经典题目

Posted by BY Bamboo on September 22, 2020

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;
}