码迷,mamicode.com
首页 > 其他好文 > 详细

链表基础知识

时间:2015-11-18 02:02:42      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

要点:链表的一个结点中,除了要保存数据,还必须保存它下一个结点的地址。

链表类型:

(1)单链表:每个结点只包含一个引用(即地址),指向下一个结点

(2)双向链表:每个结点包含两个引用,指向它的上一个结点和下一个结点

(3)单循环链表:在单链表中,表尾结点的引用指向表头结点即为单循环链表

准备数据

1 class data {
2     String name ;
3     String key ;
4     int age ;
5 }
6 class CLType {
7     data nodeData = new data();
8     CLType nextNode;
9 }

class data 为结点的类,class CLType是链表的类。

链表的基本操作

追加结点(在末尾增加一个结点)

步骤:

(1)申请内存空间,保存新增的结点

(2)从表头开始检查,找到最后一个结点

(3)把表尾的引用指向新的结点

(4)把新增的结点的引用设置为null

 1 CLType CLAddEnd(CLType head,data nodeData) {
 2     CLType node,htemp;
 3     if((node = new CLType) == null) {
 4         System.out.println("申请内存失败");
 5         return null;
 6     }
 7     else {
 8         node.nodeData = nodeData;
 9         node.nextNode = null;
10         if(head == null){
11             head = node;
12             return head;
13         }
14         htemp = head;
15         while(htemp.nextNode != null){
16             htemp = htemp.nextNode;
17         }
18         htemp.nextNode = node;
19         return head;
20     }
21 }

查找结点(通过关键字查找)

 1 CLType CLFindNode(CLType head,Strind key){
 2     CLType htemp;
 3     htemp = head;            //从头开始找
 4     while(htemp != null){    //若结点有效,则开始查找
 5         if(htemp.nodeData.key.compareTo(key) == 0){
 6             return htemp;
 7         }
 8         htemp = htemp.nextNode;
 9     }
10     return null;        //没找到
11 }

 

插入结点

步骤:

(1)申请内存

(2)找到要插入的逻辑位置(位于哪两个结点之间)

(3)修改插入位置结点的引用

 1 CLType CLInsertNode(CLType head,Srting findkey,data nodeData){
 2     CLType node,nodetemp;
 3     if((node = new CLType()) == null){      //    申请内存
 4         System.out.println("申请内存失败");
 5         return null;
 6     }
 7     node.nodeData = nodeData;                //保存新增结点的数据
 8     nodetemp = CLFindNode(head,findkey);
 9     if(nodetemp == null){
10         node.nextNode = nodetemp.nextNode;
11         nodetemp.nextNode = node;
12     }
13     else{
14         System.out.println("未找到正确位置");
15     }
16     return head;
17 }

删除结点

(1)找到要删除的结点

(2)使前一结点的引用指向要删除结点的下一个结点

(3)删除结点

 1 int CLDeleteNode(CLType head,String key){
 2     CLType node ,htemp;
 3     htemp = head;
 4     node = head;
 5     while(htemp != null){
 6         if(htemp.nodeData.key.compareTo(key) == 0){
 7             node.nextNode = htemp.nextNode;
 8             htemp = null;        //释放内存
 9             return 1;
10         }
11         else {
12             node = htemp;
13             htemp = htemp.nextNode;
14         }
15     }
16     return 0;
17 }

 

链表基础知识

标签:

原文地址:http://www.cnblogs.com/ljh-dm/p/4973366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!