LeetCode 第二十四题 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
这道题并没有特别的难点,代码如下所示:
Java
class Solution {
public ListNode swapPairs(ListNode head){
ListNode point = new ListNode(0);
point.next = head;
head = point;
while(point.next!=null&&point.next.next!=null){
ListNode first = point.next;
ListNode second = point.next.next;
ListNode third = point.next.next.next;
point.next = second;
second.next=first;
first.next=third;
point=point.next.next;
}
return head.next;
}
}
C++
class Solution {
public:
ListNode* swapPairs(ListNode* head)
{
ListNode* point=new ListNode(0);
point->next=head;
head=point;
while(point->next!=NULL&&point->next->next!=NULL)
{
ListNode* first=point->next;
ListNode* second=point->next->next;
ListNode* third=point->next->next->next;
point->next=second;
second->next=first;
first->next=third;
point=point->next->next;
}
return head->next;
}
};
python
class Solution(object):
def swapPairs(self, head):
point = ListNode(0)
point.next = head
head = point
while point.next and point.next.next:
first = point.next
second = point.next.next
third = point.next.next.next
point.next = second
second.next = first
first.next = third
point = point.next.next
return head.next
最后在网址中看到了更为简便的算法,十分短小精悍,可以参考一下,下面是其代码。
参考
public class Solution {
public ListNode swapPairs(ListNode head) {
if ((head == null)||(head.next == null))
return head;
ListNode n = head.next;
head.next = swapPairs(head.next.next);
n.next = head;
return n;
}
}