题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
typedef struct ListNode *PtrToNode;
class Solution
{
public:
ListNode* swapPairs(ListNode* head)
{
//新建一个节点用于指向原来节点的头结点
PtrToNode P=(PtrToNode)malloc(sizeof(struct ListNode));
P->next=head;
//新建一个操作节点,与P一样都指向原来链表的头结点
//P用来最后返回链表,tmp用于交换的操作过程
PtrToNode tmp=P;
//循环条件分别对应节点有偶数个与奇数个的情况
while(head!=NULL&&head->next!=NULL){
PtrToNode Position1=head;//前节点
PtrToNode Position2=head->next;//后节点
//交换两个节点的次序
tmp->next=Position2;
Position1->next=Position2->next;
Position2->next=Position1;
//交换后Position变为后一个节点
head=Position1->next;
//将操作节点指向新一组节点的前一个节点
//也就是本组的第二个节点
tmp=Position1;
}
return P->next;
}
};