/**
 *功能:链表节点的定义
 * */
public class Node { private int data;
private Node next; public Node(int data) {
this.data = data;
this.next = null;
} public void setData(int data) {
this.data = data;
} public int getData() {
return data;
} public Node getNext() {
return next;
} public void setNext(Node next) {
this.next = next;
}}/**
 *功能:单链表定义
 * */public class LinkList { Node head; public LinkList() {
head = null;
}

}
请编写算法,实现将输入的数组转化成单链表,并将其插入到给出的单链表的指定位置后。注意:单链表 的结点的序号从1开始。如果输入的序号小于1,则将数组生成的链表连到现有单链表的头部;类似如果输入的序号大于单链表 的长度,则将数组生成的链表连到现有的链表尾部。 例如:输入单链表为{1,6},在序号为1的结点后插入数组{2,3,4,5},得到的单链表为{1,2,3,4,5,6}。 输入单链表为{1,2,3,4},在序号为8的结点后插入数组{5,6,7},得到的单链表为{1,2,3,4,5,6,7}。 /**
* 功能:在指定的单链表的指定序号结点后插入输入的数组生成的单 链表。
* 参数:单链表l,在单链表l上进行链接插入操作。
* 参数:序号idx, 用于标识单链表上结点的序号,可能小于1或大于l的长度。
* 参数:整型数组arrs,要将arrs转化成单链表,然后再链接到l的指定位置上去。
* 返回值:生成的新链表。
*/
public static LinkList linkInsert_L(LinkList l, int idx, int[] arrs){}这个题搞了很久了,现在还没弄出来,请各位大虾帮一下忙

解决方案 »

  1.   

    题有问题,如果LinList l原来是空的,或要求0位置插入是实现不了的,因为在两种情况下,都要修改LinkList l的值,但在java中只有值传递,所以对形参l的改变不会影响到实际参数!解决的办法,就是给LinkList加一个头结点.这个头结点不表示任何数据.
      

  2.   

    感觉这个链表定义的也太单薄了,
    因为要获取链表l的长度,不得不遍历整个链表来获取其长度。然后用这个度与序号进行比较。如果要插入的数组链表在l的中间某个位置又要遍历一次找到这个位置。如果数组链表要插到尾部也要遍历找到l最尾部的那个结点如果数组链表要放在l的前面,还要遍历数组链表找到最后的那个结点与l的head发生关系比较麻烦。
      

  3.   

    import java.util.*;
    /** 
    *功能:链表节点的定义 
    * */ 
    class Node { 
    private int data; 
    private Node next; 

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

    public void setData(int data) { 
    this.data = data; 
    }

    public int getData() { 
    return data; 
    }

    public Node getNext() { 
    return next; 
    }

    public void setNext(Node next) { 
    this.next = next; 
    }


    public class LinkList { 
    Node head; 

    public LinkList() { 
    //加一头结点:
    head = new Node(0); 
    }
    public Node getHead(){
    return head;
    }


    public  void printLinkList(){
    Node p=head;
    while(p.getNext()!=null){
    p=p.getNext();
    System.out.print(p.getData()+"-->");
    }
    System.out.println("\b\b\b   ");
    }
    //返回值是void了,不用返回值了:
    //还可以把static去掉,把linkInsert_L变为非静态的,这样参数LinkList l也可以去掉了:
    public static void linkInsert_L(LinkList l, int idx, int[] arrs){ 
    int counter=0;
    Node p=l.getHead();
    while(p.getNext()!=null&&counter<idx){
    p=p.getNext();
    counter++;
    }
    Node q=p.getNext();
    for(int i=0;i<arrs.length;i++){
    Node temp=new Node(arrs[i]);
    p.setNext(temp);
    p=temp;
    }
    p.setNext(q); } 
    public static void main(String[] args){
    LinkList l=new LinkList();
    int[] a1={1,6};
                    //先插入一个数组a1:
    linkInsert_L(l,0,a1);
                    //输出结果看看:
    l.printLinkList();

    int[] a2={2,3,4,5};
                     //插入新的数组:
    linkInsert_L(l,1,a2);
    l.printLinkList();
    }
      } F:\java>java LinkList
    1-->6
    1-->2-->3-->4-->5-->6
      

  4.   

    不好意思啊,各位朋友!必须严格遵守题目的要求,不得修改方法的返回值,或者是类型,因为它题目的main方法我们是无法知道的。