题目描述
链表每k个节点之间逆序,最后不足k个的节点不用逆序。
解题方法1
- 最简便的方式可以使用栈来完成,将链表节点依次入栈,当栈中元素达到k个时再依次出栈尾插到新链表中,这样不断入栈k个元素出栈k个元素就可以实现每k个节点之间逆序。
- 需要注意的是,如果链表长度不是k的倍数,会有最后一组节点不足k个。如果循环结束栈中还有元素就将这些元素按原链表顺序插入到新链表之后(头插)。
public class Test {
public static void main(String[] args) throws Exception {
int[] arr = {
1,2,3,4,5,6,7,8,9,10,11,12};
Node head = create1(arr);
fun(head,3);
for(Node p=head.next;p!=null;p=p.next){
System.out.println(p.val);
}
}
//将单链表每k个节点逆序
public static void fun(Node head,int k){
Stack<Node> s = new Stack<>();
Node p = head.next;
Node last = head;
last.next = null;
while(p!=null){
while(s.size()<k &&p!=null){
s.