您的位置:首页 > 其它

LeetCode解题记录(24)——两两交换链表中的节点

2020-01-13 17:03 281 查看

LeetCode解题记录——两两交换链表中的节点

  • 解题方案
  • 题目说明

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    测试样例

    输入:1->2->3->4
    输出:2->1->4->3

    题意理解

    两两交换指的是每两个元素交换一下位置,不具有传递性,可以看作一个一个的块,块内元素进行转换。

    解题方案

    为了减少代码量,在整个链表前加了一个无意义的头节点,使得头节点与其他节点有同等地位。

    /**
    * Definition for singly-linked list.
    * struct ListNode {
    *     int val;
    *     ListNode *next;
    *     ListNode(int x) : val(x), next(NULL) {}
    * };
    */
    class Solution {
    public:
    ListNode* swapPairs(ListNode* head) {
    ListNode *h = new ListNode(0);//空头节点
    h->next = head;
    ListNode *a = h,*b = head;
    while(b!=NULL&&b->next!=NULL){//转向
    a->next = b->next;
    b->next = a->next->next;
    a->next->next = b;
    a = a->next->next;//向后移动
    b = a->next;
    }
    return h->next;
    }
    };


    所有代码都可以在我的github上找到:LeetCode

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    DerrickerXu 发布了29 篇原创文章 · 获赞 2 · 访问量 289 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: