题目描述:
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example:
Given1->2->3->4
, you should return the list as2->1->4->3
.
中文理解:
给定一个链表,从头开始相邻两个交换顺序,返回交换后链表。
解题思路:
使用快慢指针,交换链表节点的值,每个链表每次更新走两步,同时注意链表走到头的情况。
代码(java):
/**
* 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 fast=head.next,slow=head;
int tmp=0;
while(fast!=null){
tmp=slow.val;
slow.val=fast.val;
fast.val=tmp;
if(fast.next!=null && fast.next.next!=null)fast=fast.next.next;
else break;
slow=slow.next.next;
}
return head;
}
}