链表初始化后,再用定义的添加头节点方法没有用。
// 一个类链表里包含类节点
class MyNodeLsit {
class Node {
int val;
Node next;
Node (int val) {
this.val = val;
}
}
private Node head;
private int size;
public MyNodeLsit () {
this.head = null;
this.size = 0;
}
// 获得索引的值
public int getId (int index) {
if(index >= this.size) {
return -1;
}
Node cur = head;
while( index-- > 0) {
cur = cur.next;
}
return cur.val;
}
// 在第一个添加节点
public void addPreData (int val) {
size++;
Node newHead = new Node(val);
if (head != null) {
newHead.next = head;
}
head = newHead;
}
// 在最后一个添加节点
public void addLastData (int val) {
this.size ++;
Node newNode = new Node(val);
Node cur = this.head;
if(cur !=null) {
while(cur.next != null) {
cur = cur.next;
}
cur.next = newNode;
}
else {
this.head = newNode;
}
}
// 删除指定的节点
public void deleteAtindex(int index) {
if(index >= this.size) {
return;
}
Node cur = this.head;
while(--index > 0) {
cur = cur.next;
}
// 遍历到要删除的上一个节点处
cur.next = cur.next.next;
this.size--;
}
// 在指定位置添加指定值
public void addAtIndex(int index, int val) {
boolean b = index < 0;
if (index >= this.size || b) {
return;
}
else if(index == this.size-1) {
this.addLastData(val);
}
else if(index == 0) {
this.addPreData(val);
}
else {
Node cur = this.head;
Node newNode = new Node(val);
while(--index > 0) {
cur = cur.next;
}
newNode.next = cur.next;
cur.next = newNode;
this.size++;
}
}
// 初始化链表
public Node init (int array[]) {
for(int i = array.length-1 ; i >= 0 ; i--) {
this.addPreData(array[i]);
}
return this.head;
}
// 打印链表
public void print(Node node) {
if(node == null) {
return;
}
while(node != null) {
System.out.println(node.val);
node = node.next;
}
}
// 返回链表的长度
public int getLength(Node node) {
int length = 0;
if(node == null) {
return -1;
}
while(node != null) {
length++;
node = node.next;
}
return length;
}
}
public class NodeList {
public static void main(String args[]) {
int array[] = {1, 2, 3, 4};
MyNodeLsit l1 = new MyNodeLsit();
MyNodeLsit.Node head = l1.init(array);
// l1.addLastData(9);
// l1.deleteAtindex(4);
// l1.addAtIndex(0, 7);
l1.addPreData(6);
l1.print(head);
System.out.println("长度: " + l1.getLength(head));
}
}
链表初始化用到了添加头结点的方式,再在主函数里添加头结点,不知道为什么添加不了。
都是初始化时候的值
希望能有大佬帮下忙