- 题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
注意:你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
来源:LeetCode
- 示例
给定 1->2->3->4, 你应该返回 2->1->4->3.
- 思路分析
思路其实很简单,就是指针一直改变指向并且用next串联起来,就是在指来指去的过程中容易指着指着后面就没了或者进入死循环。
- JAVA实现
public class SwapPairs {
public static ListNode swapPairs(ListNode head) {
ListNode swap = new ListNode(0);
ListNode saveHead = swap;
swap.next = head;
ListNode nextHead = new ListNode(); //保存这一对节点的下一个节点
while(head!=null && head.next != null) { //注意容易忽略的是,当将swap指向一个节点并指定了swap.next,则该节点原来的后继就不存在了,相当于链表断掉,因此需要在断掉之前先保存后面的节点
swap.next = head.next;
swap = swap.next;
nextHead = swap.next;
swap.next = head;
swap = swap.next;
swap.next = nextHead;
head = nextHead;
}
return saveHead.next;
}
}