題目描述:給定一個(gè)鏈表尖飞,兩兩交換其中相鄰的節(jié)點(diǎn)锭部,并返回交換后的鏈表。你不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值裂明,而是需要實(shí)際的進(jìn)行節(jié)點(diǎn)交換。
示例:給定 1->2->3->4, 你應(yīng)該返回 2->1->4->3.
java代碼:
非遞歸方法:
class Solution {
? ? public ListNode swapPairs(ListNode head) {
? ? ? ? ListNode pre = new ListNode(0);
? ? ? ? pre.next = head;
? ? ? ? ListNode temp = pre;
? ? ? ? while(temp.next != null && temp.next.next != null) {
? ? ? ? ? ? ListNode start = temp.next;
? ? ? ? ? ? ListNode end = temp.next.next;
? ? ? ? ? ? temp.next = end;
? ? ? ? ? ? start.next = end.next;
? ? ? ? ? ? end.next = start;
? ? ? ? ? ? temp = start;
? ? ? ? }
? ? ? ? return pre.next;
? ? }
}
遞歸方法:
class Solution {
? ? public ListNode swapPairs(ListNode head) {
? ? ? ? if(head == null || head.next == null)
? ? ? ? ? ? return head;
? ? ? ? ListNode next = head.next;
? ? ? ? head.next = swapPairs(next.next);
? ? ? ? next.next = head;
? ? ? ? return next;
? ? }
}