美文网首页
0024-两两交换链表中的节点

0024-两两交换链表中的节点

作者: liyoucheng2014 | 来源:发表于2019-01-15 11:47 被阅读0次

两两交换链表中的节点

方案一


需要建立dummy节点,注意在连接节点的时候

借助单链表实现

C-源代码


/**
 两两交换链表中的节点 1->2->3->4
 
 @param head 不带头结点
 @return 交换之后的链表 2->1->4->3
 */
struct ListNode *swapPairs(struct ListNode *head)
{
    struct ListNode *dummy = (struct ListNode *)malloc(sizeof(struct ListNode));
    struct ListNode *prev = dummy;
    prev->next = head;
    
    while (prev->next != NULL && prev->next->next != NULL) {
        
        struct ListNode *a = prev->next;
        struct ListNode *b = prev->next->next;
        
        struct ListNode *temp = b->next;
        prev->next = b;
        b->next = a;
        a->next = temp;
        prev = a;
    }
    
    return dummy->next;
}

/**
 两两交换链表中的节点测试
 */
void test_0024(void)
{
    int arr[4] = { 1, 2, 3, 4 };
    struct ListNode *head = linkListCreateHead(arr, sizeof(arr) / sizeof(arr[0]));

    printf("========两两交换链表中的节点测试========\n");
    
    printNode(head);
    struct ListNode *new = swapPairs(head->next);
    printNode(new);
}

方案二


利用了回溯的思想,递归遍历到链表末尾,然后先交换末尾两个,然后依次往前交换

借助单链表实现

C-源代码


struct ListNode *swapPairs2(struct ListNode *head)
{
    if (!head || !head->next) {
        
        return head;
    }
    
    struct ListNode *temp = head->next;
    head->next = swapPairs(head->next->next);
    temp->next = head;
    
    return temp;
}

参考Grandyang

相关文章

  • 0024-两两交换链表中的节点

    两两交换链表中的节点 方案一 需要建立dummy节点,注意在连接节点的时候 借助单链表实现 C-源代码 方案二 利...

  • LeetCode-24 两两交换链表中的节点

    题目:24. 两两交换链表中的节点 难度:中等 分类:链表 解决方案:节点的交换 今天我们学习第24题两两交换链表...

  • LeetCode 24. 两两交换链表中的节点

    24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点...

  • Leetcode 24 两两交换链表中的节点

    两两交换链表中的节点 题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内...

  • leetCode进阶算法题+解析(四)

    两两交换链表中的节点 题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部...

  • Swift - LeetCode - 两两交换链表中的节点

    题目 两两交换链表中的节点 问题: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 说明: 你的算法只...

  • 【LeetCode】24.两两交换链表中的节点

    题目描述 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的...

  • 链表五:链表的反转

    题目地址: 两两交换链表中的节点题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只...

  • 24. 两两交换链表中的节点

    24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 给定1->2->3...

  • 每周 ARTS 第 21 期

    1. Algorithm 24. 两两交换链表中的节点(中等) 描述: 给定一个链表,两两交换其中相邻的节点,并返...

网友评论

      本文标题:0024-两两交换链表中的节点

      本文链接:https://www.haomeiwen.com/subject/dpnedqtx.html