美文网首页
26. Swap Nodes in Pairs

26. Swap Nodes in Pairs

作者: 时光杂货店 | 来源:发表于2017-03-16 18:12 被阅读2次

题目

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.

频度: 4

解题之法

/**
 * 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 tmphead(0); tmphead.next = head;
        ListNode *pre = &tmphead, *p = head;
        while(p && p->next)//p 和 p->next是待交换的两个节点,pre是p的前一个节点
        {
            pre->next = p->next;
            p->next = p->next->next;
            pre->next->next = p;
             
            pre = p;
            p = p->next;
        }
        return tmphead.next;
    }
};

分析

给链表添加一个临时的头结点, 这样操作更方便。其实大部分链表问题,添加一个头结点,都会简化后面的操作。

相关文章

网友评论

      本文标题:26. Swap Nodes in Pairs

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