用链表完成行列alibaba - 乐橙lc8

用链表完成行列alibaba

2019-02-11 10:34:30 | 作者: 景明 | 标签: 链表,行列,指向 | 浏览: 4766

成果:

根节点
节点1
节点2
节点3
链表的长度为:4
第4个节点的值为:节点3

 

往行列中增加元素:

 

第一个节点进来时:

tem1=root;//将tem1指向根节点root,此刻tem1和root指向的是同一个地址

 

  

第二个节点进来时:

tem1.next=tem;//将tem1的下一个节点指向tem,因为root和tem1指向的是同一个地址,所以root.next也指向了tem

tem1=tem;//将tem1指向tem,此刻tem1和tem指向同一个地址(此刻tem所指向的地址)

  

 

第三个节点进来时:

tem1.next=tem;//将tem1的下一个节点指向tem,因为此刻的tem1和上一次的tem指向的是同一个地址,所以tem.next也指向了tem

tem1= tem;//将tem1指向tem,此刻tem1和tem指向同一个地址(此刻tem所指向的地址)

 

 

 

 

第四个节点进来时:

tem1.next=tem;//将tem1的下一个节点指向tem, 因为此刻的tem1和上一次的tem指向的是同一个地址,所以tem.next也指向了tem

 

tem1=tem;//将tem1指向tem, 此刻tem1和tem指向同一个地址(此刻tem所指向的地址) 

 

  

上面向行列中增加元素只能在链表为空的情况下增加,经过以上剖析,下面咱们来完善一下add()办法,使得不管链表是否为空,咱们都能够向行列中增加元素。

 

剖析:

当链表不为空时;

上例是首先将tem1指向了root节点,然后如上所述增加了新的节点;在这里,咱们能够把tem1指向最终一个节点,然后如上所述增加新的节点。

 

tem1=end;//将tem1指向end,此刻tem1和end指向同一地址

 

 

 

tem1.next=tem;//将tem1.next指向了tem,因为上一步tem1和tem1指向了同一地址,所以tem1也指向了tem

tem1=tem;//将tem1指向tem,此刻tem1和tem指向了同一地址

 

 

 

咱们怎么获取最终一个节点呢?

1、  先求出已有链表的长度index,所以咱们需求写一个求链表长度的办法LinkListSize();

2、  链表最终一个节点的方位就是index;

3、  然后咱们要取得最终一个节点,所以咱们需求一个获取链表上某一指定方位节点的办法get(int index);

 

要害代码如下:

/**
 * 用链表完成一个行列
 * @author zr
public class NodeList {
 private LinkNode root;
 LinkNode tem1=new LinkNode();//实例化一个节点tem1作为一个暂时节点运用
 public NodeList(LinkNode root){
 this.root=root;
 * 向行列中参加一个元素
 * @param obj 要向行列中参加的元素
 public void add(Object obj){
 if(rootnull){
 root=new LinkNode();//实例化一个根节点
 root.data=obj;
 }else{
 LinkNode tem=new LinkNode();//实例化一个节点tem
 tem.data=obj;
 int index=LinkListSize();//取得链表的长度
 tem1=get(index);//取得链表的最终一个节点
 //tem1=root;//留意:不能在此处将tem1指向root,不然,每次参加的新元素都加在了root后边
 tem1.next=tem;//将tem1的下一个节点指向tem
 tem1=tem;//将tem1指向tem
 * 当链表不为空时,向行列中参加元素
 * @param obj
 * @return 回来链表根节点
 public LinkNode add1(Object obj){
 int index=LinkListSize();
 LinkNode end=get(index);
 System.out.println("end.data="+end.data);
 LinkNode tem=new LinkNode();
 tem.data=obj;
 tem1=end;//将tem1指向end
 tem1.next=tem;
 tem1=tem;
 System.out.println("tem1.data="+tem1.data);
 return root;
 * 获取链表指定方位的节点
 * @param index 指定的方位
 * @return
 public LinkNode get(int index){
 int count=1;
 LinkNode node=new LinkNode();
 LinkNode tem=new LinkNode();
 LinkNode tem1=new LinkNode();
 tem=root;
 while(count index||countindex){
 if(countindex){
 node=tem;
 count++;
 tem1=tem.next;
 tem=tem1; 
 return node;
 * 取得行列的长度
 * @return 回来行列的长度
 public int LinkListSize(){
 int size = 0;
 LinkNode tem=new LinkNode();
 LinkNode tem2=new LinkNode();
 tem2=root;
 while(tem2!=null){ 
 tem=tem2.next;
 tem2=tem;
 size++;
 return size;                          
			
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章