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

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

示例:

给定 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* dummy=new ListNode(0);
        dummy->next=head;
        head=dummy;
        while(head->next!=NULL && head->next->next!=NULL){
            ListNode *p1=head->next;
            ListNode *p2=head->next->next;
            head->next=p2;
            p1->next=p2->next;
            p2->next=p1;
            head=p1;
        }
        return dummy->next;
    }
};
//递归
/**
 * 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) {
         if (head==NULL)return NULL;
         if (head->next==NULL) return head;
        ListNode*temp =head->next;
        head->next=swapPairs(temp->next);
        temp->next=head;
        return temp;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 给定1->2->3...
    不爱去冒险的少年y阅读 2,563评论 0 0
  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 10,074评论 1 45
  • (一)LeetCode206.反转链表 题目描述: 反转一个单链表。 代码实现 (二)LeetCode160. 相...
    Jarily阅读 5,238评论 0 5
  • 我拿着棍 我端着盆 我坐在人行道的正中间 一个小朋友 走到我身边 欢快的问 爷爷 你干什么呢?
    小眼睛大鼻子阅读 1,324评论 0 0
  • 29号那天,和父母出去吃饭,照全家福。 今天过微信朋友圈的时候,看到了实习的前辈发了一个这样的朋友圈,可能是他工...
    忽尔今至阅读 1,414评论 0 0

友情链接更多精彩内容