24. 两两交换链表中的节点
题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
代码实现
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummyHead = new ListNode(0,head);
ListNode preNode = dummyHead;
while(preNode.next != null && preNode.next.next != null){
ListNode fistNode = preNode.next;
ListNode nextNode = fistNode.next;
preNode.next = nextNode;
fistNode.next = nextNode.next;
nextNode.next = fistNode;
preNode = fistNode;
}
return dummyHead.next;
}
}
解题思路
- 创建虚拟头节点dummyHead,使得next指针始终指向头节点
- 设置preNode 等于 dummyHead,
- 开启 while 循环,三步完成一对结点的交换
- 使得preNode的next指向下一个需要交换的节点
- 继续交换,直到preNode.next为空,或者 preNode.next.next为空