老师让我们模拟下LinkedList中的remove方法小弟想了半天才想出来这么个办法,可是这个办法只能删除头结点和尾结点,中间的没反映。
小弟的思路是将删除元素分成三种情况:1.删除的是头结点 那么就将head=第二个结点,然后将原来的头结点的引用变为null
2.删除尾结点 那么就将最后个元素的引用变为null 3.删除中间部分的,先用一个Node变量 nn记录住我传入的索引的元素中的引用 Node nn=temp; 然后将temp=nn.next; 最后将nn的引用变为null
具体代码如下class Node {
Object data; //数据元素
Node next; //指向下一个节点
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}class LinkList {
Node head; //头节点
private int len;
public LinkList(){
len=0;
}
public LinkList(Node node){
this.head=node;
len=0;
}
public void add(Node node){
if(head==null){
head=node;
len++;
}
else{
Node temp=head;
while(temp.next!=null){
temp=temp.next;
}
temp.next=node;
len++;
}
}
public void remove(int index){
System.out.println(len);
if(index>=len||index<0){
throw new ArrayIndexOutOfBoundsException();
}
Node temp=head;
while(temp.next!=null){
temp=temp.next;
if(index==0){//0表示第一个元素.
System.out.println("删除第一个");
Node n=head;
head=n.next;
n=null;
break;
}else if(index==len-1){
System.out.println("删除最后");
temp.next=null;
break;
}else{
System.out.println("删除中间");
Node nn=temp;
temp=nn.next;
nn=null;
break;
}
}
}
public void display(){
Node temp=head;
while(temp!=null){
System.out.println(temp);
temp=temp.next;
}
}
}
class Test {
public static void main(String[] args) {
LinkList link=new LinkList();
Node n1=new Node();
link.add(n1);
Node n2=new Node();
link.add(n2);
Node n3=new Node();
link.add(n3);
link.remove(1);//删除第二个元素,0表示第一个.
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
System.out.println("------------------------------------");
link.display(); }}
小弟的思路是将删除元素分成三种情况:1.删除的是头结点 那么就将head=第二个结点,然后将原来的头结点的引用变为null
2.删除尾结点 那么就将最后个元素的引用变为null 3.删除中间部分的,先用一个Node变量 nn记录住我传入的索引的元素中的引用 Node nn=temp; 然后将temp=nn.next; 最后将nn的引用变为null
具体代码如下class Node {
Object data; //数据元素
Node next; //指向下一个节点
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}class LinkList {
Node head; //头节点
private int len;
public LinkList(){
len=0;
}
public LinkList(Node node){
this.head=node;
len=0;
}
public void add(Node node){
if(head==null){
head=node;
len++;
}
else{
Node temp=head;
while(temp.next!=null){
temp=temp.next;
}
temp.next=node;
len++;
}
}
public void remove(int index){
System.out.println(len);
if(index>=len||index<0){
throw new ArrayIndexOutOfBoundsException();
}
Node temp=head;
while(temp.next!=null){
temp=temp.next;
if(index==0){//0表示第一个元素.
System.out.println("删除第一个");
Node n=head;
head=n.next;
n=null;
break;
}else if(index==len-1){
System.out.println("删除最后");
temp.next=null;
break;
}else{
System.out.println("删除中间");
Node nn=temp;
temp=nn.next;
nn=null;
break;
}
}
}
public void display(){
Node temp=head;
while(temp!=null){
System.out.println(temp);
temp=temp.next;
}
}
}
class Test {
public static void main(String[] args) {
LinkList link=new LinkList();
Node n1=new Node();
link.add(n1);
Node n2=new Node();
link.add(n2);
Node n3=new Node();
link.add(n3);
link.remove(1);//删除第二个元素,0表示第一个.
System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
System.out.println("------------------------------------");
link.display(); }}
解决方案 »
- java.net.URLConnection问题
- 怎么new出来对象不调用构造方法?但是默认构造方法不是没有参数????
- 求助:关于AWT
- 为什么不能重绘呢?
- cannot resolve symbol :class
- applet在网页中运行没有报错 也没法调试
- 学习java一段时间,却不知道该继续学习什么了,郁闷中。。。。
- 鼠标拖动中为何会有抖动,并且和鼠标停放位置不一致呢?请教
- 关于package的打包问题?
- 我安装完JDK1.4后,完成环境变量的设置。执行编译程序javac *.java,但出现错误提示信息bed command or file name!!
- 员工类, 有姓名, 年龄, 薪水三个成员属性需要私有并提供get, set方法, 可以通过构造函数进行初始化,并且按照薪水排序 有一句报错
- 北邮国安面试题
int current = 0;
while(temp.next!=null){
...//代码不变 else if (current==index){ //循环到目标节点才执行
...//代码不变
} current++; //节点位置+1
}