两两交换链表中的节点
描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
解答:
1.非递归
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/
class Solution {
/**
* @param ListNode $head
* @return ListNode
*/
function swapPairs($head) {
if ($head == null || $head->next == null) {
return $head;
}
$result = $head;
while ($head->next != null) {
$tmp = $head->val;
$head->val = $head->next->val;
$head->next->val = $tmp;
$head = $head->next->next;
}
return $result;
}
}
2.递归
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/
class Solution {
/**
* @param ListNode $head
* @return ListNode
*/
function swapPairs($head) {
if ($head == null || $head->next == null) {
return $head;
}
$next = $head->next;
$head->next = $this->swapPairs($next->next);
$next->next = $head;
return $next;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs