编程

单链表的头插法和尾插法

2018-07-26  本文已影响0人  Coding_Wolf

头插法

//链表节点类实现
public class Node<T> {

    /**
     * 下一个节点
     */
    Node<T> next;

    /**
     * 节点存储的数据
     */
    T val;

    /**
     *
     * @param val data域
     * @param next 指针域
     */
    Node(T val,Node<T> next){
        this.val=val;
        this.next=next;
    }

    boolean hasNext(){
        return this.next!=null;
    }
}

//单链表的操作类
public class LinearList<T> {
    //链表头结点
    Node<T> head;

    public LinearList(){
        //空链表
        this.head=new Node<T>(null,null);
    }
    
    //头插法 链表 指针指向最this.head
    void add(T val){
        this.head=new Node<T>(val,this.head);
    }
    
    public static void main(String[] args) {
        LinearList<Integer> list = new LinearList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        Node<Integer> head = list.head;
        while (head.hasNext()) {
            System.out.println(head.val);
            head = head.next;
        }
    }
}

尾插法

尾插法.jpg
LinkList  CreatList2(LinkList &L){
    //从表头到表尾正向建立单链表L,每次均在表尾插入元素
    int x;  // 设元素类型为整型
    L=(LinkList)malloc(sizeof(LNode));
    LNode *s, *r=L;  //r 为表尾指针
    scanf ("%d", &x);  //输入结点的值
    while (x!=9999) {  //输入 9999 表示结束
        s=(LNode *)malloc(sizeof(LNode));
        s->data=x;
        r->next=s;
        r=s;  //r指向新的表尾结点
        scanf ("%d", &x);
    }
    r->next = NULL;  //尾结点指针置空
    return L;
}
上一篇 下一篇

猜你喜欢

热点阅读