leetcode-cn.com/problems/sw…java
給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換後的鏈表。node
你不能只是單純的改變節點內部的值,而是須要實際的進行節點交換。算法
示例:bash
給定 1->2->3->4, 你應該返回 2->1->4->3.
複製代碼
遞歸寫法要觀察本級遞歸的解決過程,造成抽象模型,由於遞歸本質就是不斷重複相同的事情。而不是去思考完整的調用棧,一級又一級,無從下手。如圖所示,咱們應該關注一級調用小單元的狀況,也就是單個f(x)。spa
其中咱們應該關心的主要有三點:指針
在本題中:code
遞歸解法cdn
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;
}
}
複製代碼
非遞歸解法blog
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;
}
}
複製代碼
後臺回覆「算法」,加入每天算法羣 以爲算法直擊靈魂,歡迎點擊在看和轉發遞歸