题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
解题思路:
设置三个指针,分别指向前后和当前节点。
首先设置创建一个prehead结点,用来返回结果。
接着创建left、mid、right三个结点,交换mid和right结点的位置,然后修改left结点的next值。
最后使left等于修改后的mid结点(实际上是left、mid、right三个节点中最右位置的结点,因为交换了mid、right结点的位置),mid =left.next,right = mid.next
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null)
return head;
ListNode prehead = new ListNode(-1);
prehead.next = head;
ListNode left = prehead;
ListNode mid = prehead.next;
ListNode right = mid.next;
while(mid != null && right != null)
{
mid.next = right.next;
right.next = mid;
left.next = right;
left = mid;
mid = left.next;
if(mid != null) //如果mid为空,则需判断一下
right = mid.next;
}
return prehead.next;
}
}