题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
思路
题目简单,思路也比较简单:
1、首先明确一个循环中需要四个变量: 交换的两个节点+交换后的小链表赋值给前面的链表节点+后面的链表节点赋值给当前交换后的链表节点;
明确四个节点变量的作用,进行交换赋值即可;
2、直到节点为空跳出循环;
程序
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head){
struct ListNode* last = NULL;
struct ListNode* pre = head;
struct ListNode* mid = NULL;
struct ListNode* next = NULL;
/*获取链表头*/
if(pre != NULL && pre->next != NULL){
head = head->next;
}
/*直到没有节点或者剩余一个节点时,跳出循环*/
while(pre != NULL && pre->next != NULL){
mid = pre->next;
next = mid->next;
/*重新连接链表*/
pre->next = next;
mid->next = pre;
if(last != NULL){
last->next = mid;
}
last = pre;
pre = next;
}
return head;
}