力扣刷题:8-两两交换链表中的节点(24)

61 阅读1分钟

每次翻转前两个节点,并且下一次翻转时,使用下一个节点作为头节点进行翻转。

下面是使用C语言实现的代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* swapTwo(struct ListNode* first, struct ListNode* second) {
    first->next = second->next;
    second->next = first;
    return second;
}

struct ListNode* swapPairs(struct ListNode* head){
    struct ListNode ret = {
        .val = 0,
        .next = head
    }, *p = &ret, *q;
    while (p && p->next && p->next->next) {
        q = p->next->next;
        p->next = swapTwo(p->next, q);
        p = q->next;
    }
    return ret.next;
}