给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
package leetCode_5_14;
/**
* @author : caoguotao
* @date 创建时间:2019年5月14日 下午8:05:03
* @version 1.0
* @parameter
* @since
* @return
*/
public class Solution24 {
static class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = null;
ListNode res = swapPairs(node1);
while(res != null) {
System.out.println(res.val);
res = res.next;
}
}
public static ListNode swapPairs(ListNode head) {
if(head == null)
return head;
if(head.next == null)
return head;
ListNode temp = new ListNode(0);
temp.next = head;
ListNode node = temp;
while(temp.next != null) {
ListNode node1 = temp.next;
ListNode node2 = temp.next.next;
if(node2 != null) {
temp.next = node2;
node1.next = node2.next;
node2.next = node1;
}
temp = node1;
}
return node.next;
}
}