每日一题——两两交换链表中的节点

简介: 每日一题——两两交换链表中的节点

两两交换链表中的节点

题目链接

思路

  • 首先我们来理解题意:题目要求我们两两交换链表中的节点,即第1个和第2个,第3个和第4个……如果最后一个为单个节点(如节点情况为 1 2 3 4 5)那么就不进行处理。注意,题目要求的是对节点进行交换,而不是修改节点内的值。
  • 这道题其实和反转链表方法类似,我们可以先新建一个表头指向原来的表,从而确保交换第一个节点和第二个节点后还能返回链表的头,然后我们就可以定义一个指针cur来遍历链表,进行节点的两两交换就可以了

具体步骤

  • 新建一个表头newHead指向原来的表头head
  • 定义指针cur = head,prev = newHead(即cur的前一个节点),当cur和cur->next不为空时进行循环
  • 每次循环都定义一个temp = cur->next,对cur,temp,prev三个指针进行操作,从而实现节点的交换
  • 如图展示的就是交换第一组节点的过程

  • 最后返回新头结点的next即可

实现代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* swapPairs(struct ListNode* head){
    //当链表为空或只有一个节点是,不要交换,直接返回原头节点
    if(head == NULL || head->next == NULL)
        return head;
    //建立新表头
    struct ListNode *newHead = (struct ListNode *)malloc(sizeof(struct ListNode));
    newHead->next = head;
    struct ListNode *cur = head, *prev = newHead;
    //当cur和cur->next都不为空时进行循环
    while(cur && cur->next)
    {
        struct ListNode *temp = cur->next;
        cur->next = temp->next;
        temp->next = cur;
        prev->next = temp;
        //交换完后更新prev和cur的位置
        prev = cur;
        cur = cur->next;
    }
    return newHead->next; //返回表头
}


相关文章
05_删除链表的倒数第N个节点
05_删除链表的倒数第N个节点
04_两两交换链表中的节点
04_两两交换链表中的节点
|
2月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
42 5
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
33 4
|
3月前
|
安全 云计算
云计算自旋锁问题之在线程安全地删除链表节点时,需要频繁加锁会影响性能如何解决
云计算自旋锁问题之在线程安全地删除链表节点时,需要频繁加锁会影响性能如何解决
39 2
|
4月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
4月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
4月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
31 2
|
5月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
45 1