交换相邻的两个节点,这个代码比较直观,就是先创建一个头结点,作为prev,还创建了一个swap函数交换两个指针。
ListNode * swap(ListNode *A, ListNode *B)
{
if(!B) return A;
A->next=B->next;
B->next=A;
return B;
}
ListNode* swapPairs(ListNode* head) {
ListNode * dom=new ListNode(0);
dom->next=head;
ListNode *start=dom;
while(start && start->next)
{
start->next=swap(start->next, start->next->next);
start=start->next->next;
}
return dom->next;
}
还有另一种很用了双重指针,诡异但是很简单的代码。
ListNode* swapPairs(ListNode* head) {
ListNode **pp = &head, *a, *b;
while ((a = *pp) && (b = a->next)) {
a->next = b->next;
b->next = a;
*pp = b;
pp = &(a->next);
}
return head;
}
我最开始没仔细看题,直接就交换数据了,实际上不符合题意。