• 单链表每隔k反转


    初步版本,没有考虑特殊情况。

    import java.util.*;

    class Node{
     int data;
     Node next;
     public Node(int data) {
      this.data = data;
     }
    }

    class Link{
     Node head = null;
     Node tmp = null;
     
     public void addnode(int data) {
      Node n = new Node(data);
      if(head == null) {
       head = n;
       tmp = head;
       return;
       }
      tmp.next = n;
      while(tmp.next != null)//确保tmp在链尾
       tmp = tmp.next;
     }
     
     public Link reverselink(Link a) {//反转:迭代,从表头开始一个个加到另一个表中。
      Link b = new Link();
     while(a.tmp!=null) {
      a.tmp = a.head.next;
      a.head.next = b.head;
      b.head = a.head;
      a.head = a.tmp;
     }
      return b;
     }
     
     public Link addlink(Link a, Link b) {//把b加到a后面:先找到a的尾巴,再连起来。
      a.tmp = a.head;
      while(a.tmp.next != null) {
       a.tmp = a.tmp.next;
      }
      a.tmp.next = b.head;
      return a;
     }
     
     public Link reverselink(Link a,int num, int k) {//每隔k反转:把a分割,一段一段反转,剩余补在最后。
        Link c = new Link();
      a.tmp = a.head;
           for(int i = num-k; i >= 0; i-=k) {
       Link b = new Link();
       for(int count = k; count > 0; count--) {
           b.addnode(a.tmp.data);
           a.tmp = a.tmp.next;    
          }
       if(c.head == null)
       {c = reverselink(b);
       }
       else
       {c.addlink(c,reverselink(b));
       }
     }
         if(a.tmp != null) {
          a.head = a.tmp;
         c.addlink(c,a);
         }
      return c;
     }
     
     public void printLink(Link a) {//输出
      a.tmp = a.head;
      if(a.tmp == null)
      {System.out.println("null");}
      else{
       while(a.tmp.next != null) {
       System.out.print(a.tmp.data +" ");
       a.tmp = a.tmp.next;
          }
       System.out.print(a.tmp.data);
      }
     }
     
    }
     
     
    public class Main {
     
     public static void main(String[] args) {
      Scanner in = new Scanner (System.in);
      int num = in.nextInt();
      int k = in.nextInt();
      Link L =new Link();
      for(int i=0; i<num; i++) {
       L.addnode(in.nextInt());
      }
      L.printLink(L.reverselink(L,num,k));  
      in.close();
     }

    }

  • 相关阅读:
    CentOS 6.5系统使用yum方式安装LAMP环境
    省市区三级联动—PCASClass
    javascript进击(九)参考手册
    javascript进击(八)JSON
    javascript进击(七)Ajax
    javascript进击(六)Jquery
    javascript进击(五)JS对象
    javascript进击(四)HTML DOM
    javascript进击(三)简介
    javascript进击(一)简介
  • 原文地址:https://www.cnblogs.com/dyq19/p/10263788.html
Copyright © 2020-2023  润新知