您的位置:首页 > Web前端 > Node.js

Leetcode_swap-nodes-in-pairs(c++ and python version)

2014-03-17 19:28 501 查看
地址:http://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.

思路:基本数据结构的操作,WA了几次,还是不熟。要多写写才好。

参考代码:

class Solution {
public:
ListNode *swapPairs(ListNode *head) {
if(!head)
{
return head;
}
ListNode *p1 = head, *p2 = head->next, *cur=head;
if(!p2)
{
return head;
}
head = p2;
p1->next = p2->next;
p2->next = p1;
cur = p1;
while(p1->next)
{
p1 = p1->next;
p2 = p1->next;
if(p2)
{
p1->next = p2->next;
p2->next = p1;
cur->next = p2;
cur = p1;
}
}
return head;
}
};

python参考代码:

把原来的list split成了两个sub list,然后再merge一下,现在回想一个月前用c++实现的没有split的做法好牛逼啊。。。

遇上这样的题一定要冷静

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
# @param a ListNode
# @return a ListNode
def swapPairs(self, head):
if not head or not head.next: return head
p1 = h1 = head
p2 = h2 = head.next
while p1 and p2:
p1.next = p2.next
p1 = p1.next
if not p1: break
p2.next = p1.next
p2 = p2.next
nxt1 = p1 = h2
nxt2 = p2 = h1
while p1 and p2:
nxt1 = p1.next
nxt2 = p2.next
p1.next = p2
if nxt1:
p2.next = nxt1
p1 = nxt1
p2 = nxt2
return h2


//SECOND TRIALclass Solution {public:    ListNode *swapPairs(ListNode *head) {        if(!head || !head->next)            return head;        ListNode *l1 = head, *l2 = head->next;        ListNode *p1 = l1, *p2 = l2, *nxt1 = NULL, *nxt2 = NULL;        while(p1 && p2)        {            p1 = p1->next = p2->next;            if(p1)                p2 = p2->next = p1->next;        }        p1 = l1;        p2 = l2;        while(p1 && p2)        {            nxt1 = p1->next;            nxt2 = p2->next;            p2->next = p1;            if(nxt2)            {                p2 = p1->next = nxt2;                p1 = nxt1;            }            else                break;        }        return l2;    }};
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: