码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Swap Nodes in Pairs

时间:2015-03-04 19:03:40      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

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

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.

Example Questions Candidate Might Ask:

Q: What if the number of nodes in the linked list has only odd number of nodes?

A: The last node should not be swapped.

Solution:

Let’s assume p, q, r are the current, next, and next’s next node.

We could swap the nodes pairwise by adjusting where it’s pointing next:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
 
 q->next = p;
 p->next = r;

The above operations transform the list from {p –> q –> r –> s } to {q –> p –> r –> s}.

If the next pair of nodes exists, we should remember to connect p’s next to s. Therefore, we should record the current node before advancing to next pair of nodes.

To determine the new list’s head, you look at if the list contains two or more elements. Basically, these extra conditional statements could be avoided by inserting an extra node(also knoen as the dummy head) to the front of list.

Code:

/**
 * Author : Acjx
 * Email  : zhoujx0219@163.com
 */

/**
 * 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 *dummyHead = new ListNode(0);
        dummyHead->next = head;
        ListNode *prev = dummyHead;
        ListNode *curr = head;
        
        // {curr->p->q->r} -> {p->curr->q->r}
        while (curr != NULL && curr->next != NULL)
        {
            ListNode *p = curr->next; 
            ListNode *q = curr->next->next;
            
            prev->next = p;
            p->next = curr;
            curr->next = q;
            
            prev = curr;
            curr = q;
        }
        
        return dummyHead->next;
    }
};

[LeetCode] Swap Nodes in Pairs

标签:

原文地址:http://www.cnblogs.com/jianxinzhou/p/4314017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!