题目描述
题目描述
给定一个单向链表,依次交换每一对相邻的两个结点,返回修好后的链表头结点。
链表结点的数据结构:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
样例
样例
输入:1->2->3->4
输出:2->1->4->3
额外要求
不得修改链表中结点的 val 值,仅可以使用常数的空间。
**
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *e_head=new ListNode(0);//在head前方构造一个节点
e_head->next=head;
ListNode *p=e_head;
while(p)
{
ListNode *first=p->next,*second;//*second=first->next写法是错误的,必须先判断first是否为空指针,再对second赋值
if(!first) break;
second=first->next;
if(!second) break;
p->next=second;
first->next=second->next;//这一步和下一步顺序不能交换
second->next=first;
p=first;//此时first已经在原来的second位置上
}
return e_head->next;//head可能被交换
}
};