package com.app.main.LeetCode;
import com.app.main.LeetCode.base.ListNode;
/**
* Created with IDEA
* author:Dingsheng Huang
* Date:2019/6/29
* Time:下午5:39
*
*题目信息:
* level = medium
* id = 24
* Given a linked list, swap every two adjacent nodes and return its head.
*
* You may not modify the values in the list's nodes, only nodes itself may be changed.
*
* Example:
*
* Given 1->2->3->4, you should return the list as 2->1->4->3.
*/
public class SwapNodesInPairs {
/**
* 思路
* 初始化两个临时节点变量,pre 、 curr 分别表示第一、第二个节点
*
* 遍历:
* 当 curr != null 时, 交换 pre、curr 的 val
*
* 判断:
* 当 curr 往后两个节点有一个为 null时, 表示后面不需要交换了,直接返回结果 head
* 否则,pre、curr 同时向右平移两个单位,继续做交换
*
*
* @param head
* @return
*/
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode pre = head;
ListNode curr = pre.next;
int tempVal = 0;
while (curr != null) {
tempVal = pre.val;
pre.val = curr.val;
curr.val = tempVal;
if (curr.next == null || curr.next.next == null) {
return head;
}
pre = curr.next;
curr = curr.next.next;
}
return head;
}
}