0
点赞
收藏
分享

微信扫一扫

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

题目描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]

解题思路:
这题,两两交换,遍历链表,每次都记录前置结点,当遍历结点的个数是双数的时候,就和前置结点交换结点值。

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* swapPairs(struct ListNode* head)
{
    if (NULL == head)   //校验错误输入
        return NULL;

    int cnt = 1;
    struct ListNode* pPreNode = NULL;
    struct ListNode* pTem = head;

    while (NULL != pTem)
    {
        if (cnt % 2 == 0)
        {
            int nTem = pPreNode->val;
            pPreNode->val = pTem->val;
            pTem->val = nTem;
        }
        pPreNode = pTem;
        pTem = pTem->next;
        cnt++;
    }
    return head;
}
举报

相关推荐

0 条评论