题目:两两交换链表中的节点
要求:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
例如 :
输入:1->2->3->4
输出:2->1->4->3
解题思路:
- 使用指针指向即将交换的节点前一个节点
- 交换两个节点,并将前指针指向交换后的后一个节点
题解代码如下:
class Solution {
public ListNode swapPairs(ListNode head) {
if (null == head || null == head.next) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
while (null != pre.next && null != pre.next.next) {
ListNode left = pre.next;
ListNode right = pre.next.next;
pre.next = right;
left.next = right.next;
right.next = left;
pre = left;
}
return dummy.next;
}
}