用JAVA语言这以下程序代码。 链表类 1.能够从头部添加节点。 2.能够从尾部添加节点。 3.
用JAVA语言这以下程序代码。链表类1.能够从头部添加节点。2.能够从尾部添加节点。3.能够查找出来一个值是否在链表内4.能够输出来一个值在链表中的位置是第几个。5.能够...
用JAVA语言这以下程序代码。
链表类
1.能够从头部添加节点。
2.能够从尾部添加节点。
3.能够查找出来一个值是否在链表内
4.能够输出来一个值在链表中的位置是第几个。
5.能够输出来一个值在链表中的全部位置。
6.能够输入新节点到某一个值(第一次出现)的节点 之后
7.能够从节点删除某个值(只删离头最近的那一个)
8.能够从节点删除某个值(全部)
9.能够从节点删除第几个值
10.能够任意输出第几个节点的值。
11.能够遍历整个链表的值
12.能够获得链表的长度
13.能够获得链表的头
越详细越好,谢谢了! 展开
链表类
1.能够从头部添加节点。
2.能够从尾部添加节点。
3.能够查找出来一个值是否在链表内
4.能够输出来一个值在链表中的位置是第几个。
5.能够输出来一个值在链表中的全部位置。
6.能够输入新节点到某一个值(第一次出现)的节点 之后
7.能够从节点删除某个值(只删离头最近的那一个)
8.能够从节点删除某个值(全部)
9.能够从节点删除第几个值
10.能够任意输出第几个节点的值。
11.能够遍历整个链表的值
12.能够获得链表的长度
13.能够获得链表的头
越详细越好,谢谢了! 展开
2个回答
展开全部
package com.llist;
public class SingleLinkList<T> implements LList<T> {
protected Node<T> head; // 头指针,指向单链表的头结点
// 默认构造方法,构造空单链表
public SingleLinkList(){
head = new Node<T>();
}
// 由指定数组中的多个对象构造单链表,采用尾查构造单链表
public SingleLinkList(T[] element){
this();
Node<T> rear = this.head;
for(int i=0;i<element.length;i++){
rear.next = new Node<T>(element[i],null);
rear = rear.next;
}
}
// 判断链表是否为空
public boolean isEmpty() {
return this.head.next==null;
}
// 返回链表的长度
public int length() {
int count = 0;
Node<T> p = this.head.next;
while(p!=null){
count++;
p = p.next;
}
return count;
}
// 返回第i(i>0)个元素,若i的指定序号无效,则返回null
public T get(int i) {
if(i<=0||i>this.length()){
return null;
}
else{
Node<T> p = this.head;
for(int j=0;j<i;j++){
p = p.next;
}
return p.data;
}
}
// 设置第i(i>0)个元素的值为x,若i指定序号无效,则抛出序号越界异常
public void set(int i, T x) {
if(x==null)
return;
if(i<=0||i>this.length()){
// 抛出序号越界异常
throw new IndexOutOfBoundsException("指定序号i="+i+"越界!");
}
else{
Node<T> p = this.head;
for(int j=0;j<i;j++){
p = p.next;
}
p.data = x;
}
}
// 链表的插入操作
public void insert(int i, T x) {
if(x==null) // 插入对象不能为空
return;
if(i==0){ // 插在头结点之后
head.next = new Node<T>(x,this.head.next);
}
else if(i>0&&i<=this.length()){
Node<T> p = this.head;
// 寻找插入位置
for(int j=0;j<i;j++){
p = p.next;
}
// 插入x作为p结点的后继结点
p.next = new Node<T>(x,p.next);
}
else{
// 抛出序号越界异常
throw new IndexOutOfBoundsException("指定序号i="+i+"越界!");
}
}
// 在单链表的最后添加对象
public void append(T x) {
insert(this.length(),x);
}
// 删除序号为i的结点,操作成功返回给对象,否则返回null
public T remove(int i) {
if(i<=0||i>this.length()){
return null;
}
else{
Node<T> p = this.head;
// 定位到待删除结点(i)的前驱结点(i-1)
for(int j=0;j<i-1;j++){
p = p.next;
}
T old = p.next.data;
p.next = p.next.next;
return old;
}
}
// 删除单链表的所有元素
public void removeAll() {
this.head.next = null;
}
// 查找,返回首次出现关键子key的元素的序号
public int Search(T key) {
if(key==null)
return 0;
else{
int i = 0;
Node<T> p = this.head;
while(p.next!=null){
i++;
p = p.next;
if(p.data.equals(key))
break;
}
if(p.next==null)
return 0;
else
return i;
}
}
//返回链表的所有元素的描述字符串,覆盖Object类的toString()方法
public String toString(){
String str = " ( ";
Node<T> p = this.head.next;
while(p!=null){
str += p.data.toString();
p = p.next;
if(p!=null)
str += ",";
}
str += " ) ";
return str;
}
}
public class SingleLinkList<T> implements LList<T> {
protected Node<T> head; // 头指针,指向单链表的头结点
// 默认构造方法,构造空单链表
public SingleLinkList(){
head = new Node<T>();
}
// 由指定数组中的多个对象构造单链表,采用尾查构造单链表
public SingleLinkList(T[] element){
this();
Node<T> rear = this.head;
for(int i=0;i<element.length;i++){
rear.next = new Node<T>(element[i],null);
rear = rear.next;
}
}
// 判断链表是否为空
public boolean isEmpty() {
return this.head.next==null;
}
// 返回链表的长度
public int length() {
int count = 0;
Node<T> p = this.head.next;
while(p!=null){
count++;
p = p.next;
}
return count;
}
// 返回第i(i>0)个元素,若i的指定序号无效,则返回null
public T get(int i) {
if(i<=0||i>this.length()){
return null;
}
else{
Node<T> p = this.head;
for(int j=0;j<i;j++){
p = p.next;
}
return p.data;
}
}
// 设置第i(i>0)个元素的值为x,若i指定序号无效,则抛出序号越界异常
public void set(int i, T x) {
if(x==null)
return;
if(i<=0||i>this.length()){
// 抛出序号越界异常
throw new IndexOutOfBoundsException("指定序号i="+i+"越界!");
}
else{
Node<T> p = this.head;
for(int j=0;j<i;j++){
p = p.next;
}
p.data = x;
}
}
// 链表的插入操作
public void insert(int i, T x) {
if(x==null) // 插入对象不能为空
return;
if(i==0){ // 插在头结点之后
head.next = new Node<T>(x,this.head.next);
}
else if(i>0&&i<=this.length()){
Node<T> p = this.head;
// 寻找插入位置
for(int j=0;j<i;j++){
p = p.next;
}
// 插入x作为p结点的后继结点
p.next = new Node<T>(x,p.next);
}
else{
// 抛出序号越界异常
throw new IndexOutOfBoundsException("指定序号i="+i+"越界!");
}
}
// 在单链表的最后添加对象
public void append(T x) {
insert(this.length(),x);
}
// 删除序号为i的结点,操作成功返回给对象,否则返回null
public T remove(int i) {
if(i<=0||i>this.length()){
return null;
}
else{
Node<T> p = this.head;
// 定位到待删除结点(i)的前驱结点(i-1)
for(int j=0;j<i-1;j++){
p = p.next;
}
T old = p.next.data;
p.next = p.next.next;
return old;
}
}
// 删除单链表的所有元素
public void removeAll() {
this.head.next = null;
}
// 查找,返回首次出现关键子key的元素的序号
public int Search(T key) {
if(key==null)
return 0;
else{
int i = 0;
Node<T> p = this.head;
while(p.next!=null){
i++;
p = p.next;
if(p.data.equals(key))
break;
}
if(p.next==null)
return 0;
else
return i;
}
}
//返回链表的所有元素的描述字符串,覆盖Object类的toString()方法
public String toString(){
String str = " ( ";
Node<T> p = this.head.next;
while(p!=null){
str += p.data.toString();
p = p.next;
if(p!=null)
str += ",";
}
str += " ) ";
return str;
}
}
追答
采纳
都有了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询