【Leetcode】【Swap Nodes in Pairs】【两两交换链表中的节点】【C++】

  • 题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
  • 考虑情况:
  1. head==NULL: 直接返回head
  2. 链表结点个数为单数
  3. 链表结点个数为偶数
  4. 链表前两个结点交换和后面的处理情况不相同,如 1---->2---->NULL, 只需修改1,2结点的next指针; 而1---->2---->3---->4---->NULL 修改1,2结点的next指针后,修改3,4结点的next指针后,还需修改1结点的next指针(由1--->3 改为1--->4)。为了避免处理前两个结点与后面结点情况的不一致性,可在头结点新插入一个指针,来保持“一般性”。
  • 代码:
    /**
     * 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) {
            if(head==NULL)
                return head;
            
            ListNode *head1=new ListNode(0);
            head1->next=head;
            
            ListNode *p1=head;
            ListNode *p2=p1->next;
            ListNode *lp=head1;
            
            while(p2)
            {
                p1->next=p2->next;
                p2->next=p1;
                lp->next=p2;
                
                lp=p1;
                p1=p1->next;
                if(p1)
                    p2=p1->next;
                else
                    break;
                
            }
            return head1->next;
            
        }
    };

     

posted @ 2018-06-12 00:38  dreamer123  阅读(401)  评论(0编辑  收藏  举报