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
posted @ 2019-05-08 17:03  benda  阅读(79)  评论(0编辑  收藏  举报