(24)Swap Nodes in Pairs
题目:将一个链表的每两个相邻链节做交换,输出交换后的链表。
例如:链表为1->2->3->4,那么返回的链表是2->1->4->3。
另外:不能开额外的链表空间。
根据题目直接从前到后扫一遍就可以了,的确是很简单的一道题,但是有几点需要特殊注意,首先就是0长度的链表,然后就是奇数长度和偶数长度的链表,这个时候只要加一个对链节的判断就可以了。
下面是代码:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *p1 = head;
if(p1 == NULL){
return head;
}
ListNode *p2 = head->next;
if(p2 == NULL){
return head;
}
ListNode *p3 = head->next->next;
p2->next = p1;
p1->next = p3;
head = p2;
if(p3 == NULL){
return head;
}
while(true){
ListNode *p0 = p1;
p1=p1->next;
p2=p1->next;
if(p2 == NULL){
return head;
}
p3 = p2->next;
p2->next = p1;
p1->next = p3;
p0->next = p2;
if(p3 == NULL){
return head;
}
}
return head;
}
};