Given a linked list, swap every two adjacent nodes andreturnits head.
For example,
Given 1->2->3->4, you should returnthelistas2->1->4->3.
Your algorithm should use only constantspace. You may not modify the values inthelist, only nodes itself can be changed.
思路:
首先是判断head和head.next为空的情况,直接返回head
然后设置first和second两个变量,用来记录一前一后两个元素
设置pre来记录上一次最后的元素。pre.next = second;
-
代码:
/**
* Definition for singly-linked list.
* publicclass ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
publicclass Solution {
public ListNode swapPairs(ListNode head) {
if(head == null||head.next == null){
return head;
}
ListNode first = head;
ListNode second = head.next;
ListNode pre = null;
ListNode swap = null;
if(second != null){
head = second;
}
while(first != null&&second != null){
swap = second.next;
second.next = first;
first.next = swap;
if(pre != null){
pre.next = second;
}
pre = first;
first = swap;
if(swap != null){
second = swap.next;
}
}
return head;
}
}