您的位置:首页 > Web前端 > Node.js

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

2015-12-29 08:23 555 查看
题意理解:

交换链表中相邻的两个元素,如原链表为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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: