LeetCode-24-Swap Nodes in Pairs(链表)-Medium

来源:互联网 发布:网络每4分钟断一次 编辑:程序博客网 时间:2024/05/21 06:19

题意理解:

交换链表中相邻的两个元素,如原链表为a->b->c->d,修改为b->a->d->c;


题目分析:

1. 不能重新分配多余内存,即只修改指针指向,不增加新的节点内容;

2. 标示要处理的两个相邻元素位置p1,p2,以及p1之前的位置pPre和p2之后的位置pNext;

3. 根据题目要求交换对应位置指针的指向内容;


解题代码:

/** * 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) {        ListNode* ans=head;                int size=0;        ListNode* pCur=head;        while(pCur!=NULL){            size++;            pCur=pCur->next;        }        pCur=head;                if(size<=1){            return ans;        }                ListNode* pPre=new ListNode(0);        ans=pPre;        ListNode* p1;        ListNode* p2;        ListNode* pNext;                for(int i=0; i<size; i+=2){            if(i==0){                pNext=head->next->next;                p1=head;                p2=head->next;                            }                        pPre->next=p2;            p2->next=p1;            p1->next=pNext;                        if(i+2>=size-1){                break;            }                        pPre=p1;            p1=pPre->next;            p2=p1->next;            pNext=p2->next;                    }                return ans->next;    }};


0 0
原创粉丝点击