题目:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例2:
输入:head = []
输出:[]
示例3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
解题代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head){
// 定义一个哑节点指向链表头
struct ListNode dummy;
dummy.next = head;
// 定义temp节点 将temp的下一个节点与下下一个节点进行交换
struct ListNode* temp = &dummy;
while(temp->next != NULL && temp->next->next != NULL){
struct ListNode* node1 = temp->next;
struct ListNode* node2 = temp->next->next;
// 交换节点
temp->next = node2;
node1->next = node2->next;
node2->next = node1;
// 更新temp位置
temp = node1;
}
// 返回头节点
return dummy.next;
}