扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
几位的回答都比较清楚了,我想另外说点问题
10多年建站经验, 成都网站建设、网站建设客户的见证与正确选择。创新互联公司提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。
你本就不应该加入‘表尾’这个属性,在数据结构中链表的特点就是能用一个地址带一个长串数据链的,不用这个属性的话思路会更加清晰。我也用java模拟过一些基本数据结构:
public class MyNodeT {
public T value;
public MyNodeT next;
public MyNode() {
}
public MyNode(T value) {
this.value = value;
}
public MyNode(MyNodeT t) {
this.value = t.value;
this.next = t.next;
}
public void connect(MyNodeT t){
this.next = t;
}
@Override
public String toString() {
return null==value?"":value+"-";
}
}
在这个节点定义的基础上的链表定义:
public class MyLinkListT{
public MyNodeT next;
public MyLinkList() {
this.next = new MyNodeT();
}
public MyLinkList(T[] tList) {
if(tList.length==0)return;
next = new MyNodeT(tList[0]);
MyNodeT temp = next;
for (int i = 1; i tList.length; i++) {
temp.connect(new MyNodeT(tList[i]));
temp = temp.next;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
MyNodeT t = next;
while (null != t) {
sb.append(t);
t = t.next;
}
return sb.toString();
}
}
然后是相关的操作类:
public class LinkListAction {
MyLinkListComparable list;
public LinkListAction(MyLinkListComparable list) {
this.list = list;
}
/**
* 头插法建立单链表(数组)
* */
public void createFromHead(Comparable...objects){
MyNodeComparable start;
for (int i = 0; i objects.length; i++) {
start = new MyNodeComparable(objects[i]);
start.next = list.next;
list.next = start;
}
}
/**
* 尾插法建立单链表(数组)
* */
public void createFromTail(Comparable...objects){
MyNodeComparable start;
MyNodeComparable end = list.next;
for (int i = 0; i objects.length; i++) {
start = new MyNodeComparable(objects[i]);
end.next = start;
end = start;
}
end.next = null;
}
/**
* 在单链表中查找第i个结点
* */
public MyNodeComparable get(int i){
if(i 0)return null;
MyNodeComparable node = list.next;
int index = 0;
while (node != null index i) {
node = node.next;
index++;
}
return node;
}
/**
* 在单链表中的按值查找
* */
public MyNodeComparable locate(Comparable obj){
if(null == obj)return new MyNodeComparable();
MyNodeComparable node = list.next;
while (node != null !obj.equals(node.value)) {
node = node.next;
}
return node;
}
/**
* 求单链表的长度
* */
public int getLength(){
int length = 0;
MyNodeComparable node = list.next;
while(null != (node = node.next)){
length++;
}
return length;
}
/**
* 单链表的插入操作(按位置)
* */
public void insert(Comparable obj,int location){
int length = 0;
MyNodeComparable node = list.next;
while(node!=null location != length++){node = node.next;}
if(null == node)throw new RuntimeException("插入位置有误!");
MyNodeComparable inserter = new MyNodeComparable(obj);
inserter.next = node.next;
node.next = inserter;
}
/**
* 删除数据
* */
public Comparable delete(int i){
int length = 0;
MyNodeComparable node = list.next;
while(node!=null i != length++){node = node.next;}
if(null == node)throw new RuntimeException("删除位置有误!");
Comparable o = node.next.value;
node.next = node.next.next;
return o;
}
/**
* 合并两个有序的单链表
* */
public static MyLinkListComparable mergeLinkList(MyLinkListComparable la,MyLinkListComparable lb){
MyLinkListComparable lc = new MyLinkListComparable();
MyNodeComparable pc = lc.next;
MyNodeComparable pa = la.next.next;
MyNodeComparable pb = lb.next.next;
while(null != pa || null != pb){
if(null == pa){
pc.next = pb;
break;
}
if(null == pb){
pc.next = pa;
break;
}
if(pa.value.compareTo(pb.value) = 0){
pc.next = pa;
pa = pa.next;
}
else {
pc.next = pb;
pb = pb.next;
}
pc = pc.next;
}
return lc;
}
@Override
public String toString() {
return list.toString();
}
public static void main(String[] args) {
MyLinkListComparable list1 = new MyLinkListComparable();
MyLinkListComparable list2 = new MyLinkListComparable();
LinkListAction lla = new LinkListAction(list1);
// lla.createFromHead(1,3,4,6,8,10);
lla.createFromTail(1,3,4,6,8,10);
LinkListAction llb = new LinkListAction(list2);
llb.createFromTail(2,5,7,9,11);
System.out.println(lla);
System.out.println(llb);
// System.out.println(lla.locate(7));
// System.out.println(lla.getLength());
//
// lla.insert(20, 6);
// System.out.println(lla);
// System.out.println(lla.delete(4));
System.out.println(LinkListAction.mergeLinkList(lla.list, llb.list));
System.out.println(lla);
System.out.println(llb);
}
}
我还写了一些其他的简单数据结构,感兴趣的话,你可以Hi我一下,呵呵。
圣诞快乐!
JAVA 做多媒体,不是强项
转 .exe 可以使用 exe4j
~
朋友 你说的最好一句话我没明白?
你能具体说下吗?最好弄个图片。
我跟你说一下思路:就是用for循环就可以.
---给你答案 供你参考,仓促写的:
public class ChristmasTree {
int x = 2;
int i = 0;
public void tree() {
for(i=0; i3; i++) {
for(int j=x; j=0; j--) {
System.out.print(" ");
}
x--;
for(int k=0; k=i; k++) {
System.out.print("*"+" ");
}
System.out.println();
}
}
public static void main(String args[]) {
new ChristmasTree().tree();
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流