两两反转单向链表 (reverse a singly linked list in pair ) [#22]
2011-12-07 12:12
621 查看
两两反转单项链表就是把每两个数反转一次。如下:
A -> B -> C ->D -> E -> F ->G -> H -> I 两两反转后变为 B -> A -> D ->C -> F -> E ->H -> G -> I
分析:
我们需要两个“指针”指着当前要反转的两个值。两两反转后,我们还需要记录下一个的值,换句话说,我们反转 A 和 B 后, 需要记录 C 值,我们才能够不断向下走,直到到达链表末端,所以,我们还需要另一个指向下一个值的“指针”。
反转以后,A的下一个是C, 但是,实际上,A的下一个应该是D,所以,每次反转时,我们需要更新前一个值的下一个值,也就是说把 A -> C 改成 A -> D。
所以,要完成这个操作,我们总共需要4个“指针”。
代码:
class Node {
char value;
Node next;
}
转载请注明出处:http://blog.csdn.net/beiyeqingteng/
A -> B -> C ->D -> E -> F ->G -> H -> I 两两反转后变为 B -> A -> D ->C -> F -> E ->H -> G -> I
分析:
我们需要两个“指针”指着当前要反转的两个值。两两反转后,我们还需要记录下一个的值,换句话说,我们反转 A 和 B 后, 需要记录 C 值,我们才能够不断向下走,直到到达链表末端,所以,我们还需要另一个指向下一个值的“指针”。
反转以后,A的下一个是C, 但是,实际上,A的下一个应该是D,所以,每次反转时,我们需要更新前一个值的下一个值,也就是说把 A -> C 改成 A -> D。
所以,要完成这个操作,我们总共需要4个“指针”。
代码:
class Node {
char value;
Node next;
}
public static Node reverseInPair(Node current) { if (current == null || current.next == null) return current; Node head = current.next;//save the head of the list Node previousNode = null; while(current != null && current.next != null) { //get the current node's next and "nextnext" node Node nextNode = current.next; Node nextNextNode = nextNode.next; //exchange the "next" node nextNode.next = current; current.next = nextNextNode; //update the "next" value of the previous node if (previousNode != null) { previousNode.next = nextNode; } previousNode = current; current = nextNextNode; } return head; }
转载请注明出处:http://blog.csdn.net/beiyeqingteng/
相关文章推荐
- 反转单向链表(reverse a singly linked list)
- 反转单向链表(reverse a singly linked list)(单个反转) [# 7]
- 链表-Reverse Linked List(反转单向链表)
- LeetCode 25 Reverse Nodes in k-Group(在K组链表中反转结点)(Linked List)(*)
- Leetcode Reverse Linked List II 反转部分单向链表
- Reverse Linked List(反转单向链表)
- [leetcode]Reverse Linked List II (反转链表值 C语言实现)
- LeetCode2.2.2 @ Reverse Linked List II 反转链表II D3F2
- Reverse Linked List链表反转问题解法分析
- leetcode206/92---Reverse Linked List I/II(反转链表)
- leetcode206-Reverse Linked List-反转链表
- 链表的反转问题(Reverse Linked List)
- [LeetCode-206] Reverse Linked List(链表反转)
- LeetCode--Reverse Linked List 反转链表(Python)
- ReverseLinkedList,ReverseLinkedList2,链表反转问题
- 92. Reverse Linked List II【遍历一遍就反转链表】
- Leetcode Reverse Linked List 反转单链表
- LeetCode OJ:Reverse Linked List (反转链表)
- LintCode Delete Node in the Middle of Singly Linked List 在O(1)时间复杂度删除链表节点
- Reverse Linked List(反转链表)