class node
{
int data;
node next;
node(int data,node next){this.data=data;this.next=next;}
node(int data){this.data=data;}
}
class ilink
{
node head;
ilink(){}
void insert(int a)
{
if(head==null) {head=new node(a);head.next=null;}
else
{
head=new node(a,head);
}
}
void print()
{
while(head!=null)
{
System.out.print(head.data+"\t");
head=head.next;
}
}
}
class testilink
{
public static void main(String[] args)
{
int[] b={1,2,3,4,5};
ilink il=new ilink();
for(int i=0;i<5;i++)
il.insert(b[i]);
il.print();
}
}
各位java的高手啊 我们老师说这个是头插法 怎样改为尾插法呢 帮忙改一下代码呗
答案:2 悬赏:10 手机版
解决时间 2021-02-18 01:33
- 提问者网友:锁深秋
- 2021-02-17 21:24
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-02-17 22:24
package com.test;
class node {
int data;
node next;
node(int data, node next) {
this.data = data;
this.next = next;
}
node(int data) {
this.data = data;
}
}
class ilink {
node head;
ilink() {
}
void insert(int a) {
if (head == null) {
head = new node(a);
head.next = null;
} else {
node temp = head;
while (temp.next != null) {
temp = temp.next;
}
node newNode = new node(a);
newNode.next = null;
temp.next = newNode;
}
}
void print() {
while (head != null) {
System.out.print(head.data + "\t");
head = head.next;
}
}
}
public class Test {
public static void main(String[] args) {
int[] b = { 1, 2, 3, 4, 5 };
ilink il = new ilink();
for (int i = 0; i < 5; i++)
il.insert(b[i]);
il.print();
}
}
就是把ilink中的insert改了一下,原来的头插法是把后来的数字放在链表的最开始,这样程序输出是数组的倒序5 4 3 2 1,尾插法是把新插入的数字放在链表的最后面,这样输出为1 2 3 4 5。
class node {
int data;
node next;
node(int data, node next) {
this.data = data;
this.next = next;
}
node(int data) {
this.data = data;
}
}
class ilink {
node head;
ilink() {
}
void insert(int a) {
if (head == null) {
head = new node(a);
head.next = null;
} else {
node temp = head;
while (temp.next != null) {
temp = temp.next;
}
node newNode = new node(a);
newNode.next = null;
temp.next = newNode;
}
}
void print() {
while (head != null) {
System.out.print(head.data + "\t");
head = head.next;
}
}
}
public class Test {
public static void main(String[] args) {
int[] b = { 1, 2, 3, 4, 5 };
ilink il = new ilink();
for (int i = 0; i < 5; i++)
il.insert(b[i]);
il.print();
}
}
就是把ilink中的insert改了一下,原来的头插法是把后来的数字放在链表的最开始,这样程序输出是数组的倒序5 4 3 2 1,尾插法是把新插入的数字放在链表的最后面,这样输出为1 2 3 4 5。
全部回答
- 1楼网友:时间的尘埃
- 2021-02-17 22:39
单链表也称为线性链表或单向链表,它是线性表的链接存储表示。
单链表的结构第一个结点(亦称为首元结点)的地址可以通过链表的头指针first找到,其他结点的地址则在前驱结点的link域中,链表的最后一个结点没有后继,在结点的link域中放一个空指针null,null在中被定义为数值0,因此对单链表的任一结点的访问必须首先根据头指针找到首元结点,再按各节点的link域中存放的指针顺序寻找。
头指针first为空的链表为空表,该链表一个结点也没有,相对的,头指针first不为空且首元结点存在的单链表为非空表,表中至少有一个节点。
单链表的结构定义
1 typedef int datatype;
2 typedef struct node
3 {
4 datatype data;
5 struct node* link;
6 }linknode,* linklist
尾插法创建一个单链表
1 #include
2 #include
3 using namespace std;
4 void insertrear(linklist& first,linknode* & last,datatype endtag)
5 {
6 //endtag是约定的输入序列结束的标志,如果输入序列是正整数,endtag可以使0或负数
7 //如果输入序列是字符,endtag可以是字符集中不会出现的字符如"\0"
8 datatype val;cin>>val;
9 if(val==endtag) last->link=null;
10 else
11 {
12 last=new linknode;
13 if(!last)
14 {
15 cerr<<"存储分配错误!\n";exit(1);
16 }
17 last->data=val;
18 insertrear(first,last->link,endtag);
19 }
20 };
21
22 int main()
23 {
24 linklist l=new linknode;
25 if(!l) {cerr<<"存储分配错误!\n";exit(1);}
26 cin>>l->data;
27 linknode* rear=l;
28 insertrear(l,rear->link,l->data);
29 return 0;
30 }
在程序中还设置一个尾指针last,它总是指向新建表中最后一个结点,新结点链接到它所链尾的后面。last设定为引用型指针,它要把新建结点地址或是空地址传送到前一结点的link域中。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯