题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
方案:链表操作,分头部和非头部两部分
头部交换图示:
非头部交换图示:
class Solution {
public ListNode swapPairs(ListNode head) {
if (head==null||head.next==null) return head;
ListNode temp = new ListNode(1);
ListNode tail = head;
head = head.next;
temp.next = tail.next.next;
head.next = tail;
tail.next = temp.next;
while(tail!=null&&tail.next!=null&&tail.next.next!=null){
temp.next = tail.next.next.next;
tail.next.next.next = tail.next;
tail.next = tail.next.next;
tail.next.next.next = temp.next;
tail = tail.next.next;
}
return head;
}
}
复杂度计算