Leetcode 24. Swap Nodes in Pairs
https://leetcode.com/problems/swap-nodes-in-pairs/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
/*
通过pre来交换后两个元素
p1=pre->next
p2=pre->next->next
p1->next=p2->next
pre->next=p2
p2->next=p1
pre=p2
边界:
1.链表长度为单数,还有0的情况[当搜不全两个的时候直接return]
*/
ListNode* pre=new ListNode(0),*pp=pre,*p1,*p2;
pre->next=head;
while(1){
p1=p2=NULL;
if(pre->next) p1=pre->next;
if(p1 && p1->next) p2=p1->next;
if(p1 && p2){
p1->next=p2->next;
pre->next=p2;
p2->next=p1;
pre=p1;
}else{
pre=pp->next;
delete pp;
return pre;
}
}
}
};
python版本
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
p=ListNode(0)
p.next=head
q=p
while(q.next and q.next.next):
a,b,c=q.next,q.next.next,q.next.next.next
q.next=b
b.next=a
a.next=c
q=q.next.next
return p.next