1. 问题描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
说明:
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
2. 代码实现
用pre, cur, lat三个指针,交换cur和lat,并使这两个节点与pre正常连接。
此题很好用于理解链表指针。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode cur = new ListNode(0);
cur.next = head;
head = cur; //用head记录起始位置
ListNode pre = cur;
cur = cur.next;
ListNode lat = cur.next;
while(cur != null && cur.next != null) {
lat = cur.next;
pre.next = cur.next;
cur.next = lat.next;
lat.next = cur;
pre = cur;
cur = cur.next;
}
return head.next;
}
}