我的代码,维护一个长度为2的栈
写的巨垃圾
public ListNode swapPairs(ListNode head) {
if(head==null||head.next==null)return head;
Stack<ListNode> stack = new Stack<>();
ListNode res=null;
ListNode temp= null;
while(head!=null){
if(stack.size()<2){
stack.add(new ListNode(head.val));
}
if (stack.size()==2&&res ==null){
ListNode node1 = stack.pop();
node1.next = stack.pop();
res = node1;
temp = res;
temp = temp.next;
}else if(stack.size()==2){
ListNode node1 = stack.pop();
node1.next = stack.pop();
temp.next = node1;
temp = temp.next;
temp = temp.next;
}
head = head.next;
}
if(!stack.isEmpty()){
temp.next = stack.pop();
temp = temp.next;
}
temp.next= null;
return res;
}
题解的递归
因为每两个ListNode的操作都是相同的,所以可以用递归来处理
class Solution {
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = head.next;
head.next = swapPairs(newHead.next);
newHead.next = head;
return newHead;
}
}
//作者:LeetCode-Solution
//链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/liang-liang-jiao-huan-lian-biao-zhong-de-jie-di-91/
//来源:力扣(LeetCode)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。