给定一个链表,要求每隔k个元素反转
2013-09-11 09:53
405 查看
给定一个链表,要求每隔k个元素反转,public void kReverse(Node node, int k)
即链表为1->2->3->4->5->6->7->8
当k=2时,链表为2->1->4->3->6->5->8->7
当k=5时,链表5->4->3->2->1->6->7->8
即链表为1->2->3->4->5->6->7->8
当k=2时,链表为2->1->4->3->6->5->8->7
当k=5时,链表5->4->3->2->1->6->7->8
class Node<T> { public T data; public Node<T> next; Node(T dataPortion) { data = dataPortion; next = null; } Node(T dataPortion, Node<T> nextNode) { data = dataPortion; next = nextNode; } } public class ListKReverse { public static void main(String[] args) { ListKReverse s = new ListKReverse(); Node n1 = new Node(1); Node n2 = new Node(2); Node n3 = new Node(3); Node n4 = new Node(4); Node n5 = new Node(5); Node n6 = new Node(6); Node n7 = new Node(7); Node n8 = new Node(8); n1.next = n2; n2.next = n3; n3.next = n4; n4.next = n5; n5.next = n6; n6.next = n7; n7.next = n8; Node head = s.ReverseInGroups(n1, 4); while (head != null) { System.out.print(head.data+" "); head = head.next; } System.out.println(); } public Node ReverseInGroups(Node current, int k) { if (current == null || current.next == null ) return current; int n=0; Node oldHead=current; while(current!=null) { current=current.next; n++; } System.out.println(n); int reverseNum=n/k; current=oldHead; Node newHead = current; Node previousGroupTail = null; int count = 1; int num=0; while (current != null&&num<reverseNum) { Node groupTail = current; Node prev = null; Node next = null; for (int i = 1; i <= k && current != null; i++) { next = current.next; current.next = prev; prev = current; current = next; } if (count == 1) { newHead = prev; count++; } if (previousGroupTail != null) { previousGroupTail.next = prev; } previousGroupTail = groupTail; num++; } if(current!=null) if (previousGroupTail != null) previousGroupTail.next = current; return newHead; } }
相关文章推荐
- [2014美团网笔试]给定一个单链表和一个整数k,要求每隔k个元素翻转链表
- 编写一个函数,给定一个头指针的单链表,要求只遍历一次,将链表中的元素次序反转。
- 编写一个函数,给定一个头指针,要求只遍历一次,将单链表中的元素反转过来
- 给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来
- 给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来
- 给定一个链表的头指针,要求只遍历一次,将单链表中的元素的顺序翻转过来
- 请给出一个时间为O(nlgk)、用来将k个已排序链表的算法。此处n为所有输入链表中元素的总数。
- 删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)
- 以k个元素为一组反转单向链表
- 给定一个数组,元素都是正整数,要求返回这些元素所组成的最大数
- 剑指offer--输入一个链表,反转链表后,输出链表的所有元素。
- 给定一个排序链表,删除所有重复的元素每个元素只留下一个。
- 输入一个链表,反转链表后,输出链表的所有元素。
- 反转链表-输入一个链表,反转链表后,输出链表的所有元素。
- 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素
- 输入一个链表,反转链表后,输出链表的所有元素。
- 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的
- java实现输入一个链表,反转链表后,输出链表的所有元素。
- 剑指offer:输入一个链表,反转链表后,输出链表的所有元素。
- 输入一个链表,反转链表后,输出链表的所有元素