Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
思路:很简单,交换相邻两个节点的值就可以了。总个数是奇数的话最后一个结点保持不变。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* swapPairs(ListNode* head)
{
if(head==NULL||head->next==NULL)
return head;
ListNode *p=head;
ListNode *q=head->next;
int temp;
temp=p->val;
p->val=q->val;
q->val=temp;
while(q->next&&q->next->next)
{
p=q->next;
q=p->next;
temp=p->val;
p->val=q->val;
q->val=temp;
}
return head;
}
void main()
{
ListNode *head=new ListNode(1);
ListNode *p=head;
for(int i=2;i<=5;i++)
{
ListNode *q=new ListNode(i);
p->next=q;
p=q;
}
ListNode *newhead=swapPairs(head);
while(newhead)
{
cout<<newhead->val<<" ";
newhead=newhead->next;
}
}