leetcode24. 两两交换链表中的节点

题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

解题思路

直接两两互换一直遍历到最后即可。

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null) return null;
ListNode p = head;
ListNode q = head.next;
ListNode pre = head;
while(q != null) {
p.next = q.next;
q.next = p;
//如果是第一个,则pre不用指向q,而且要更新head
if(p == head) {
head = q;
pre = head.next;
}else {
pre.next = q;
pre = p;
}
p = p.next;
//q在p之后,如果p已经null则可以直接结束
if(p == null) break;
q = p.next;
}
return head;
}
}

提交结果

成功
显示详情
执行用时 : 1 ms, 在Swap Nodes in Pairs的Java提交中击败了97.35% 的用户
内存消耗 : 33.4 MB, 在Swap Nodes in Pairs的Java提交中击败了98.47% 的用户