这是一个一般的问题,也许与OOP概念有关。我刚开始在JAVA中实现DS(数据结构)。
我试图实现链表,在所有在线资源上,我看到类似的做法:
1. 制作一个节点类。 2. 制作一个具有节点对象的链表类。
同样,对于堆栈、队列和树,我也看到了这样的情况。我的问题是,如果我仅通过一个类来实现LinkedList,它看起来像下面这样:
我仍然能够执行所有的操作。那么包含根或头的第二类是仅为OOP目的还是其他原因? 我编写了以下代码,它可以正常工作,而无需具有头指针。我在所有方法中使用引用变量,并且主类的对象仍然跟踪头部。
1. 制作一个节点类。 2. 制作一个具有节点对象的链表类。
同样,对于堆栈、队列和树,我也看到了这样的情况。我的问题是,如果我仅通过一个类来实现LinkedList,它看起来像下面这样:
class LinkList {
int data;
LinkList next; }
我仍然能够执行所有的操作。那么包含根或头的第二类是仅为OOP目的还是其他原因? 我编写了以下代码,它可以正常工作,而无需具有头指针。我在所有方法中使用引用变量,并且主类的对象仍然跟踪头部。
/* package codechef; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class LinkList {
int data;
LinkList next;
LinkList(){
data = 0;
next = null;
}
LinkList(int data) {
this.data = data;
next = null;
}
LinkList insertAtBegin(int data){
LinkList newBegin = new LinkList(data);
newBegin.next = this;
return newBegin;
}
void insertAtPlace(int data, int insertData){
LinkList newNode = new LinkList(insertData);
LinkList iterator = this;
while(iterator!=null && iterator.data!=data){
iterator = iterator.next;
}
if(iterator.data == data)
{
newNode.next = iterator.next;
iterator.next = newNode;
}
}
void insertAtLast(int data) {
if(next == null){
next = new LinkList(data);
}
else{
next.insertAtLast(data);
}
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
LinkList linkList = new LinkList(6);
linkList.insertAtLast(5);
linkList.insertAtLast(3);
linkList.insertAtLast(2);
linkList.insertAtLast(1);
linkList = linkList.insertAtBegin(10);
LinkList iterator = linkList;
while(iterator!=null){
System.out.print(iterator.data);
iterator = iterator.next;
}
System.out.print("\n");
linkList.insertAtPlace(5,-1);
iterator = linkList;
while(iterator!=null){
System.out.print(iterator.data);
iterator = iterator.next;
}
}
}
insertAtPlace
和insertAtLast
也必须返回列表的头部,否则它将无法适用于所有情况。 - Maurice Perry