public class linkedList {
Node head;
class Node {
int data;
Node next;
Node(int d){
data = d;
}
}
public void insertAfter(Node prev_node, int new_data){
if (prev_node == null){
System.out.print("The given previous node cannot be null");
return;
}
Node new_node = new Node(new_data);
new_node.next = prev_node.next;
prev_node.next = new_node;
}
}
对于给定的链表:11,73,80,41,22
,如果我想在73后面插入一个数字(例如0(,我可以将其作为insertAfter(llist.head.next,0)
传递。
但这是我所能命名的prev_node。如果我想在第三、第四。。。etc位置。那么争论会是什么呢?
附言:如果标题有误导性或令人困惑,请原谅,我没能用正确的词语来查询标题。
如果我理解你的问题,你想知道当你想在不同的位置插入数据时,应该为参数传递什么。由于只提供了insertAfter方法,您需要手动遍历链表。在你给出的例子中,它如下所示:
Insert after 11 -> insertAfter(llist.head, 0)
Insert after 73 -> insertAfter(llist.head.next, 0)
Insert after 80 -> insertAfter(llist.head.next.next, 0)
Insert after 41 -> insertAfter(llist.head.next.next.next, 0)
Insert after 22 -> insertAfter(llist.head.next.next.next.next, 0)
但这不是一个正确的方法。您需要提供遍历机制以及其他方法,这些方法可以在列表的开头、末尾、给定位置等处添加值。
您需要一个方法,该方法从链表的头开始,遍历到所需的位置,然后返回该Node。然后,您可以将该Node用作insertAfter()
方法的参数。
public Node getNodeAtPosition(Node head, int position){
if (head == null || position < 0)
throw new IllegalArgumentException("head == null or position < 0");
Node helper = head;
while (position != 0) {
if (helper == null)
throw new IllegalArgumentException("position > length of list");
helper = helper.next;
position--;
}
return helper;
}