每天一道leetcode(Day 37)


24. 两两交换链表中的节点

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例

给定 1->2->3->4, 你应该返回 2->1->4->3.

解题思路

利用辅助节点。添加一个哨兵节点,利用哨兵节点进行循环判断,每次循环进行对应节点指针的变换。

image.png

代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var swapPairs = function (head) {
  let tempHead = new ListNode(0);
  tempHead.next = head;
  let temp = tempHead;
  while (temp.next != null && temp.next.next != null) {
    let start = temp.next,
      end = temp.next.next;
    temp.next = end;
    start.next = end.next;
    end.next = start;
    temp = start;
  }
  return tempHead.next;
};

参考

24. 两两交换链表中的节点


文章作者: CassielLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 CassielLee !
评论
  目录