一、题意
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
二、解题思路
定义三个节点如下,交换节点位置即可
node1 node2 next
dummy->1 -> 2 -> 3 -> 4
dummy->2 -> 1 -> 3 -> 4
三、代码实现
/**
* 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) {
$dummyhead = new ListNode(0);
$dummyhead->next = $head;
$q = $dummyhead;
while ($q->next && $q->next->next) {
$node1 = $q->next;
$node2 = $node1->next;
$next = $node2->next;
$node2->next = $node1;
$node1->next = $next;
$q->next = $node2;
$q = $node1;
}
return $dummyhead->next;
}
}
还不快抢沙发