文的盲刷LeetCode|文的盲刷LeetCode 24. 两两交换链表中的节点
中文题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
Note:
- Your algorithm should use only constant extra space.
- You may not modify the values in the list's nodes, only nodes itself may be changed.
经查找,发现以下解法
解法: 本题可以说是一个非常基本的题,考的是链表的结点交换,重点在于不丢失链表地址
/**
* Definition for singly-linked list.
* struct ListNode {
*int val;
*struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head) { // LeetCode24
if (head == NULL || head->next == NULL) // 仅有0或1个结点 直接返回
return head;
struct ListNode* newHead, *p, *q, *temp;
/* 下面的开空间必不可少 否则会报错 */
newHead = (struct ListNode*)malloc(sizeof(struct ListNode));
newHead->next = head;
/* 初始化 */
temp = newHead;
p = head;
q = head->next;
while (q){
/*交换操作*/
temp->next = q;
p->next = q->next;
/* 整个交换的重点 将q之后的结点挂在p之后 */
q->next = p;
/*为下次操作准备*/
temp = p;
p = p->next;
if (p)
q =p->next;
else
q = NULL;
}return newHead->next;
}
代码说明:
- 首先,为链表设置一个头结点,防止链表丢失
- 初始化p,q,temp结点
- 开始交换,直至q结点为空
- 返回交换后的链表
![文的盲刷LeetCode|文的盲刷LeetCode 24. 两两交换链表中的节点](https://img.it610.com/image/info10/dd3e5e0c37ed4e809ee115b2a16cb9ee.jpg)
文章图片
leetcode24.png
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 宽容谁
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 第6.2章(设置属性)
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。