Given a linked list, swap every two adjacent nodes and return its head.
Example:
Given1->2->3->4
, you should return the list as2->1->4->3
Note:
- Your algorithm should use only constant extra space.
- You may not modify the values in the list's nodes, only nodes itself may be changed.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode list = head;
ListNode node = new ListNode(0);
ListNode n = node;
if(head == null){
return list;
}
Stack<Integer> stack = new Stack<>();
while(list != null){
stack.add(list.val);
list = list.next;
if(stack.size() == 2){
while(!stack.isEmpty()){
node.next = new ListNode(stack.pop());
node = node.next;
}
}
}
if(!stack.isEmpty()){
node.next = new ListNode(stack.pop());
}
return n.next;
}
}
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode newHead = new ListNode(0);
newHead.next = head;
head = newHead;
while(head.next!=null){
ListNode temp = head.next;
if(temp.next==null) break;
head.next = temp.next;
temp.next = temp.next.next;
head.next.next = temp;
head = head.next.next;
}
return newHead.next;
}
}
上面的是使用的stack进行存储,每次存储结束后利用栈的后进先出来倒序;下面的代码为直接进行链表的操作,主要是操作next指针的形式来进行倒置