题目描述:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1->2->3->4, you should return the list as2->1->4->3.
Your algorithm should use only constant space. You may notmodify the values in the list, only nodes itself can be changed.
思路解析:
- 两个一组去交换,注意先保存第三个结点
- 指针一个指向这组的前一个结点,一个指向一组的第一个结点
- 然后交换后两个指针要继续向后移动
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null || head.next==null)
return head;
ListNode fakehead = new ListNode(-1);
fakehead.next = head;
ListNode pre1 = fakehead;
ListNode pre2 = head;
while(pre2!=null&& pre2.next!=null){
ListNode nextstart = pre2.next.next;
pre2.next.next = pre2;
pre1.next = pre2.next;
pre2.next = nextstart;
pre1=pre2;
pre2=pre2.next;
}
return fakehead.next;
}
}