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