单向链表

转载 2012年03月29日 10:26:46
跳转到: 导航,搜索

单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。

Link zh.png

[编辑]动态单链表

单向链表的数据结构可以分为两部分:数据域和指针域,数据域存储数据,指针域指向下一个储存节点的地址。
package linklist2;

public class LinkList {
     private Node firstNode;  
        private int length;  
          
        public LinkList(){  
            clear();  
        }  
          
        public void clear(){  
            firstNode=null;  
            length=0;  
        }  
          
        public Node getFirstNode(){  
            return firstNode;  
        }  
          
        public boolean add(int data){  
            Node node=new Node(data);  
            if(isEmpty()){  
                firstNode=node;  
            }else{  
                Node lastNode=getNodeAt(length);  
                lastNode.next=node;  
            }  
            length++;  
            return true;  
        }  
          
        public boolean isEmpty(){  
            //return length==0;  
            //use assert to get more details when error occurs  
            boolean result;  
            if(length==0){  
                assert firstNode==null;  
                result=true;  
            }else{  
                assert firstNode!=null;  
                result=false;  
            }  
            return result;  
        }  
          
        public void reverse(){  
            if(firstNode==null)return;  
            Node p=firstNode;//use p to traverse every node  
            Node previous=null;  
            while(p.next!=null){  
                Node q=p.next;// save p.next first because the next sentence changes p.next  
                p.next=previous;  
                previous=p;  
                p=q;  
            }  
            p.next=previous;  
            firstNode=p;//should not be ignored  
        }  
          
        //recursive  
        public Node reverseRecursive(Node p){  
            if(p==null)return null;  
            if(p.next==null){  
                firstNode=p;  
                return p;  
            }  
            Node q=p.next;  
            //reverse the remaining nodes,except p  
            //when recursive returns,you can regard the link as a link that has just two elements: p-->q  
            //so the last reversing is simple: q.next=p;p.next=null;  
            Node ph=reverseRecursive(q);  
            q.next=p;  
            p.next=null;  
            System.out.print("("+ph.data+")");//ph.data=1,always  
            return ph;  
        }  
          
        public void display(){  
            Node node=firstNode;  
            while(node!=null){  
                System.out.print(node.data+" ");  
                node=node.next;  
            }  
            System.out.println();  
        }  
        private Node getNodeAt(int position){  
            Node re=firstNode;  
            if(!isEmpty()&&position>1&&position<=length){  
                for(int count=1;count<position;count++){  
                    re=re.next;  
                }  
            }  
            return re;  
        }  
          
        //use inner class  
        private class Node{  
            private int data;  
            private Node next;  
              
            private Node(int data){  
                this.data=data;  
                next=null;  
            }  
        }  
}

----------------

测试一下哦

public static void main(String[] args) {
        // TODO Auto-generated method stub
         LinkList list=new LinkList();  
            int[] a={1,2,3,4,5};  
            for(int each:a){  
                list.add(each);  
            }  
            list.display();  
            list.reverse();  
            list.display();  
            list.reverseRecursive(list.getFirstNode());  
            list.display();  
        } 


java单向链表排序,倒置,合并

  • 2017年09月25日 11:18
  • 3KB
  • 下载

单向链表操作类模板实现代码

  • 2017年09月19日 15:57
  • 3KB
  • 下载

单向链表的冒泡排序和快速排序

冒泡排序: #include typedef struct linknode { int value; struct linknode* next; } LinkNode; LinkN...

单向链表的建立

  • 2015年07月11日 14:40
  • 4KB
  • 下载

单向链表实现

  • 2013年10月11日 10:35
  • 1KB
  • 下载

Linux C 单向链表1

线性表存储结构分为顺序存储、链式存储。        顺序存储的优点:        顺序存储的缺点:        链表就是典型的链式存储,将线性表L = (a0,a1,a2,........an-...

单向链表实现

  • 2011年11月28日 23:36
  • 14KB
  • 下载

C++单向链表模板实现

  • 2012年09月23日 17:59
  • 14KB
  • 下载

LeetCode Linked List Cycle II(找到带环单向链表的环起始位置)

题目要求: Given a linked list, return the node where the cycle begins. If there is no cycle, return...
  • lqcsp
  • lqcsp
  • 2014年04月06日 11:52
  • 600

Java 单向链表 插入与删除节点

  • 2011年06月01日 20:44
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单向链表
举报原因:
原因补充:

(最多只允许输入30个字)