【LeetCode算法练习(C++)】Swap Nodes in Pairs

来源:互联网 发布:盛大云梯 mac 编辑:程序博客网 时间:2024/06/06 09:05

题目:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

链接:Swap Nodes in Pairs

解法:增加头结点便于操作,循环中每次读入两个节点交换顺序。时间O(n)

class Solution {public:    ListNode* swapPairs(ListNode* head) {        ListNode* h = new ListNode(0);        h->next = head;        ListNode* p = h;        while (p->next && p->next->next) {            ListNode* p1 = p->next;            ListNode* p2 = p1->next;            ListNode* p3 = p2->next;            p->next = p2;            p2->next = p1;            p1->next = p3;            p = p1;        }        ListNode* tmp = h;        h = h->next;        delete(tmp);        return h;    }};

Runtime: 3 ms