思路是先把字符串分为两个链,后一个链反转,然后合并两个链。这里面涉及了三个比较常见的操作第一:如何通过数组构建链表,第二:如何通过数组构建反向链表,第三:如何合并两个链表为一个链表(五指针)

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        ListNode head = reverse(s);
        while(head != null){
            if(head.next == null){
                System.out.print(head.val);
            }else{
                System.out.print(head.val+",");
            }
            head = head.next;
        }
    } 
    public  static ListNode reverse(String s){
        String[] a = s.split(",");
        if(a.length == 1){
            return new ListNode(Integer.valueOf(a[0]));
        }
        ListNode tmp = new ListNode();
        ListNode head1 = new ListNode();
        ListNode head2 = new ListNode();
        //反转使用的哑节点
        ListNode dummy = new ListNode(0);

        //构建两个链表
        for(int i = 0;i<a.length;i++){
            //前半段
            if(i<a.length-a.length/2){
                ListNode listnode = new ListNode(Integer.valueOf(a[i]));
                if(i == 0){
                    head1 = listnode;
                    tmp = head1;
                }else{
                    tmp.next = listnode;
                tmp = tmp.next;
                }
                
                
            
            
            }else{//后半段反转构建
                ListNode listnode = new ListNode(Integer.valueOf(a[i]));
                //先找到头节点
                if(i == a.length-a.length/2){
                    head2 = listnode;
                    
                }else{
                    //新产生的节点next指向链表
                listnode.next = head2;
                    head2 = listnode;
                }
                
                
            }
            
            
            
        }
        //合并两个链表
        int flag = 0;
        ListNode head = new ListNode();
        head = head1;
        ListNode tmp2 = new ListNode();
        //head1  tmp
        //head2
       while(head2!=null){
            tmp = head1.next;
            tmp2 = head2.next;
            head1.next = head2;
            head2.next = tmp;
            head1 = tmp;
            head2 = tmp2;
        }
        
       return head;
        
        
    }
   
}
 class ListNode{
        int val;
        ListNode next;
        public ListNode(){
            
        }
        public ListNode(int val){
            this.val = val;
        }
    }