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
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)希望本文对你有所帮助。
算法代码实现如下:
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; }
相关文章推荐
- leetcode 24 Swap Nodes in Pairs
- [Leetcode 24 链表]Swap Nodes in Pairs
- Leetcode 24 Swap Nodes in Pairs
- leetcode_24_Swap Nodes in Pairs
- LeetCode_24---Swap Nodes in Pairs
- [LeetCode]24 Swap Nodes in Pairs
- 【leetcode】【单链表】【24】Swap Nodes in Pairs
- Swap Nodes in Pairs - LeetCode 24
- Leetcode 24 Swap Nodes in Pairs
- leetcode[24]Swap Nodes in Pairs
- LeetCode-24 Swap Nodes in Pairs(链表中按要求交换节点)
- [leetcode 24]Swap Nodes in Pairs
- LeetCode 24 - Swap Nodes in Pairs
- LeetCode 24 Swap Nodes in Pairs (C,C++,Java,Python)
- [Leetcode 22] 24 Swap Nodes in Pairs
- [leetcode 24] Swap Nodes in Pairs
- leetcode 24 Swap Nodes in Pairs
- LeetCode 24 - Swap Nodes in Pairs
- LeetCode24之SwapNodesInPairs的Java 题解
- 【LeetCode】24.Swap Nodes in Pairs