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

Leetcode_24_Swap Nodes in Pairs

2015-01-30 07:37 525 查看
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43302355

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.

思路:

(1)题意为给定一个链表,交换链表中相邻元素的位置。

(2)该题主要考察当链表中节点位置发生变化时,如何对链表进行更新的问题。

(3)本文的方法是:首先,创建一个新的节点result,用以保存交换后的链表,称之为结果链表;创建两个标志flag1和flag2,分别记录结果链表最后一个节点和交换的两个节点的下一个节点。然后,设置节点curr指向当前head,只要curr和curr的下一个节点不为空,就循环遍历,在遍历的过程中,第一次遍历需要确定result所对链表的头结点,这里,result指向curr.next,即链表的第二节点,flag2指向curr.next.next,即第三个节点,因为在交换第一个和第二个节点后,需要知道下一个待交换的节点,这里需要把第三个节点保存起来;原先的第一个节点指向了第二个节点,交换后变为第二个节点指向第一个节点,即第一个节点curr.next.next=curr;而此时,flag1需要保存结果链表的最有一个节点,以备在后续交换中直接将其它节点加在其后面,所以flag指向curr,即交换后,第一个节点变为了第二个节点;交换完成后,curr继续向后移动,进行后续节点的交换。最后,循环操作,直到所有节点参与交换,所得result即为结果。

(4)希望本文对你有所帮助。

算法代码实现如下:

/**
* @author liqq
*/
public class Swap_Nodes_in_Pairs {
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null)
return head;

ListNode curr = head;
ListNode flag1 = null;
ListNode result = null;
ListNode falg2 = null;

while (curr != null && curr.next != null) {
if (result == null) {
result = curr.next;
falg2 = curr.next.next;
curr.next.next = curr;
curr.next = falg2;
flag1 = curr;
curr = curr.next;
} else {
falg2 = curr.next.next;
flag1.next = curr.next;

flag1.next.next = curr;
curr.next = falg2;
flag1 = curr;
curr = curr.next;
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: