LeetCode 24.Swap Nodes in Pairs

来源:互联网 发布:java接口特点是什么 编辑:程序博客网 时间:2024/06/14 07:33

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.
这道题比较简单,交换链表每相邻的两个结点。不允许直接修改结点数据域。
要注意的是链表为空、结点总数为奇数的情况。

待辅助头结点dummy的写法:

class Solution {public:    ListNode* swapPairs(ListNode* head) {        //ListNode **pp = &head;        //ListNode *dummy = new ListNode(0), *p = dummy;        //dummy->next = head;        //ListNode *p1 = p->next, *p2 = NULL;        //if (p1) p2 = p1->next;        //while (p1&&p2) {        //  p->next = p2;        //  p1->next = p2->next;        //  p2->next = p1;        //  p = p1;        //  p1 = p->next;        //  if (p1)p2 = p1->next;        //}        //return dummy->next;        ListNode *dummy = new ListNode(0), *p = dummy;        dummy->next = head;        ListNode *p1, *p2;        while ((p1 = p->next) && (p2 = p1->next)) {            p->next = p2;            p1->next = p2->next;            p2->next = p1;            p = p1;        }        return dummy->next;    }};

使用二级指针写法

class Solution {public:    ListNode* swapPairs(ListNode* head) {        ListNode **pp = &head;        ListNode *p1, *p2;        while ((p1 = *pp) && (p2 = p1->next))        {            *pp = p2;            p1->next = p2->next;            p2->next = p1;            pp = &(p1->next);        }        return head;    }};
原创粉丝点击