24.两两交换链表中的节点

一、题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

1
给定 1->2->3->4, 你应该返回 2->1->4->3.

二、题解

1.算法描述

  • 迭代法

2.个人分析

  • 3.代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    struct ListNode *swapPairs(struct ListNode *head)
    {
    if (!head)
    return NULL;
    struct ListNode *prev = (struct ListNode *)malloc(sizeof(struct ListNode));
    prev->next = head;
    struct ListNode *pre = prev, *p = head->next;
    while (head && head->next)
    {
    pre->next = p;
    head->next = p->next;
    p->next = head;
    pre = head;
    head = head->next;
    if (!head)//预防空指针
    p = NULL;
    else
    p = head->next;
    }
    return prev->next;
    }