美文网首页
24. 两两交换链表中的节点【迭代】

24. 两两交换链表中的节点【迭代】

作者: gykimo | 来源:发表于2020-06-22 18:07 被阅读0次

https://leetcode-cn.com/problems/swap-nodes-in-pairs/

我的方法一:迭代

步骤

  1. 每两个节点进行处理,node1和node2分别表示当前2个节点的首节点和尾节点;pre节点表示上一对节点的尾节点;
    1.1 交换两个节点,并pre指向交换后的首节点;尾节点指向后一对节点;
  2. Sentinel节点表示一个哑节点,指向当前第一个节点,为了处理上非空判断的方便;pre也指向Sentinel;
  3. 当最后一对节点都为空,或者有一个为空时,就停止

初始条件

  1. Sentinel指向head;
  2. node1指向head,node2指向head的next
  3. pre指向Sentinel

边界条件

  1. node1为空,或者node2为空

复杂度

时间复杂度:O(N),因为遍历一遍即可
空间复杂度:O(1),只需要Sentinel、node1、node2、pre等固定的几个辅助空间

代码

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode sentinel;
        sentinel.next = head;
        ListNode* node1 = head;
        ListNode* node2 = head ? head->next:0;
        ListNode* pre = &sentinel;
        ListNode* next_couple = 0;//for swap

        while(node1 && node2){
            pre->next = node2;
            next_couple = node2->next;

            node2->next = node1;
            node1->next = next_couple;

            pre = node1;

            node1 = next_couple;
            node2 = next_couple?next_couple->next:0;
        }

        return sentinel.next;
    }
};

相关文章

网友评论

      本文标题:24. 两两交换链表中的节点【迭代】

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