Java LinkedList:如何将内容插入特定索引?

时间:2016-11-15 17:10:22

标签: java linked-list

上周我有一个计算机实验室并没有得到充分的信任,因为我使用ArrayLists和一个数组来完成查找放入内容的索引,并在那里插入TargetValue。有人可以通过LinkedLists向我展示正确的方法吗?

CODE:

  1. 它会生成一个包含30个整数的随机列表。
  2. 它向后显示30​​个整数的列表。
  3. 它会生成一个随机数,该数字将超出“TargetValue”。
  4. 从最小的分类链接列表 - >最大。
  5. 需要:我希望看到在特定点将某些内容插入其索引的正确方法。
  6. public class LAB11 {
        public static LinkedList<Integer> LabList = new LinkedList<Integer>();
        public static ArrayList<Integer> LabArray = new ArrayList<Integer>();
        public static LinkedList<Integer> SortedList = new LinkedList<Integer>();
        public static int TargetValue;
    
        public static void main(String args[]){
            PopulateList();
            BackwardsList();
            GenerateTarget();
            SortList();
        }
    
        public static void PopulateList(){
            Random random = new Random();
            int range = 100 - 1 + 1;
            for(int i = 0 ; i < 30 ; i++){
                int rn = random.nextInt(range) + 1;
                LabList.add(rn);
                LabArray.add(rn);
            }
            System.out.println("LINKED LIST GENERATED\n" + LabList);
        }
    
        public static void BackwardsList(){
            LabList.clear();
            for(int i = 29 ; i >= 0 ; i--){
                int temp = LabArray.get(i);
                LabList.add(temp);
            }
            System.out.println("\nLINKED LIST REVERSED\n" + LabList);
        }
    
        public static void GenerateTarget(){
            Random random = new Random();
            int range = 100 - 1 + 1;
            TargetValue = random.nextInt(range) + 1;
            System.out.println("\nTARGET VALUE: " + TargetValue);
        }
    
        public static void SortList(){
            Collections.sort(LabList);
            System.out.println(LabList);
    
            // NEEDED: INSERT TAGETVALUE INTO THE INDEX THAT KEEPS NUMBERS IN ORDER STILL.
        }
    }
    

1 个答案:

答案 0 :(得分:0)

传统的LinkedList数据结构不支持O(1)插入指定的索引。 LinkedList的定义结构是每个元素都包含指向其下一个邻居的指针。

让我们看一个简单的实现:

public class Node {
  int x;
  Node next;

  public Node(int x)
  {
     this.x = x;
  }
}

然后我们可以像这样创建一个LinkedList

Node n1 = new Node(3);
n1.next = new Node(4);
n1.next.next = new Node(1);
n1.next.next.next = new Node(0);

3 --> 4 --> 1 --> 0

请注意n1中我们唯一可以立即使用的对象。要联系其他人,我们需要遍历LinkedList。同样的逻辑适用于插入指定的索引。我们必须遍历结构才能到达我们可以执行插入的位置。

这个伪代码显示了它是如何完成的

Node current = n1
Node insertionNode = new Node(10);
int insertionInx = 2
int currentIdx = 0
while currentIdx < insertionIdx - 1
  current = current.next
  currentIdx++
temp = current.next
current.next = insertionNode
current.next.next = temp

当然,您必须处理插入索引超出列表长度等边缘情况,但这有助于您更好地理解数据结构。