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

leetcode Swap Nodes in Pairs

2016-09-05 16:59 381 查看
两两交换节点,如下

Given 
1->2->3->4
,
you should return the list as 
2->1->4->3
.

我的思路是每次处理2个,即1和2交换完后,再对3和4操作。

注意点:如果3和4交换了,那么此时1应该指向4而不是3,即要加入plast

可能在末尾仅剩1个,即无需再交换,需要加if(pright==NULL) break;

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head) {
struct ListNode *pleft,*pright,*new_head,*plast;
if(head==NULL||head->next==NULL) //若无节点或仅一个节点,直接返回
return head;
pleft=head; //左节点
new_head=pleft->next; //新头节点一定是左节点的下一个
plast=NULL; //刚开始没有上一个节点,置为NULL
while(pleft!=NULL)
{
pright=pleft->next; //右节点
if(pright==NULL) //如果右节点为空,说明到尾了,退出
break;

//否则开始交换操作
if(plast!=NULL)
plast->next=pright; //如果发生交换,那么上一节点一定会指向右节点
pleft->next=pright->next; //左节点指向右节点的下一个
pright->next=pleft; //右节点指向左节点
//交换操作结束

plast=pleft; //设置上一节点
pleft=pleft->next; //开始处理后面2个
}
return new_head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: