题目
Given a linked list, swapevery two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should useonly constant space. You may not modify the values in the list, onlynodes itself can be changed.
要求常数空间,不能更改值。
每两个元素为单位向后推,记录之前调整后元素的后者,保存后继。
代码:
/**
* 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||head->next==NULL)
return head;
ListNode *p1=head,*p2=p1->next,*p_pro=NULL,*p_next; //每两个元素的前、后,之前2个元素调整后的后者,未调整的之后的元素
head=p2;
while(p2!=NULL)
{
if(p_pro!=NULL)
p_pro->next=p2;
p_next=p2->next;
p2->next=p1;
p_pro=p1;
p_pro->next=p_next;
p1=p_next;
if(p_next!=NULL)
p2=p1->next;
else
break;
}
return head;
}
};