思路:
p、q操作链表;
必须保证每次操作有两个节点;
考虑形成新的链表,不单单只是交换两个元素;
代码:
struct ListNode* swapPairs(struct ListNode* head){
if(head == NULL || head->next == NULL)
return head;
struct ListNode* p = head;
struct ListNode* q = head->next;
struct ListNode* newHead = head->next; /* 为什么不可以直接返回 head->next */
while(p != NULL && q != NULL){
/* 指针变向 */
p->next = q->next;
q->next = p;
/* 指针后移 */
p = p->next;
if(p != NULL && p->next != NULL){
q->next->next = p->next; /* 很重要!不加这一步,只是单纯的交换两个元素,并没有考虑形成新的链表 */
q = p->next;
}
else
break;
}
return newHead;
}