学习java带有头结点的单链表结构

[java]  view plain  copy
  1. //10-14 数据结构中带有头结点的单链表结构,用java语言简单实现  
[java]  view plain  copy
  1.   
[java]  view plain  copy
  1. public class LineListNodeHead {  
  2.       
  3.     public static void main(String[] args) {  
  4.         LineList L = new LineList();  
  5.         L.addNodeH(1);  
  6.         L.addNodeH(2);  
  7.         L.addNodeF(3);  
  8.         L.addNodeF(6);  
  9.         L.ListInsert(15);  
  10.         L.ListDelete(2);  
  11.           
  12.         L.ListClear();  
  13.           
  14.         L.addNodeF(3);  
  15.         L.addNodeH(2);  
  16.           
  17.           
  18.           
  19.         L.ListNode();  
  20.           
  21.     }  
  22.       
  23.     public interface IList{  
  24.         public void addNodeH(int data);  
  25.         public void addNodeF(int data);  
  26.         public void ListNode();  
  27.         public int ListInsert(int i, int data);  
  28.         public int ListDelete(int i);  
  29.         public void ListClear();  
  30.     }  
  31.       
  32.     //结点  
  33.     public static class Node{  
  34.         public int data;  
  35.         public Node next;  
  36.           
  37.         public Node(){  
  38.               
  39.         }  
  40.           
  41.         public Node(int data){  
  42.             this.data = data;  
  43.             this.next = null;  
  44.         }  
  45.     }  
  46.       
  47.     public static class LineList implements IList{  
  48.         //头结点  
  49.         private Node head;  
  50.           
  51.         //链表长度  
  52.         private int size;  
  53.           
  54.         public LineList(){  
  55.             head = new Node();  
  56.         }  
  57.   
  58.         @Override//带头结点的单链表头插法  
  59.         public void addNodeH(int data) {  
  60.             Node node = new Node(data);  
  61.             if(head.next == null){  
  62.                 head.next = node;  
  63.                 size++;  
  64.             }else{  
  65.                 node.next = head.next;  
  66.                 head.next = node;  
  67.                 size++;  
  68.             }  
  69.               
  70.         }  
  71.           
  72.         @Override//带头结点的单链表尾插法  
  73.         public void addNodeF(int data) {  
  74.             Node node = new Node(data);  
  75.             if(head.next == null){  
  76.                 head.next = node;  
  77.                 size++;  
  78.             }else{  
  79.                 Node p = head.next;  
  80.                 while(p.next != null){  
  81.                     p = p.next;  
  82.                 }  
  83.                 node.next = p.next;  
  84.                 p.next = node;  
  85.                 size++;  
  86.             }  
  87.         }  
  88.   
  89.         @Override//带头结点的单链表遍历  
  90.         public void ListNode() {  
  91.             Node p = head.next;  
  92.             if(p == null){  
  93.                 System.out.println("空链表");  
  94.                 System.out.println("单链表的长度" + size);  
  95.             }  
  96.             while(p.next != null){    
  97.                 System.out.print(p.data  + "->");  
  98.                 p = p.next;                   
  99.                 }  
  100.               
  101.             System.out.println(p.data);  
  102.             System.out.println("单链表的长度" + size);  
  103.               
  104.               
  105.         }  
  106.   
  107.         @Override//带头结点的单链表任意插入  
  108.         public int ListInsert(int i, int data) {  
  109.             Node temp = head;  
  110.             int j = 1;  
  111.             if(i<0){  
  112.                 System.out.println("i值输入有误");  
  113.                 return 0;  
  114.             }  
  115.             while(temp.next != null && j<i){  
  116.                 temp = temp.next;  
  117.                 j++;  
  118.             }  
  119.             Node node = new Node(data);  
  120.             node.next = temp.next;  
  121.             temp.next = node;  
  122.             size++;  
  123.               
  124.             return 1;  
  125.         }  
  126.   
  127.         @Override//单链表的删除  
  128.         public int ListDelete(int i) {  
  129.             Node temp = head;  
  130.             int j = 1;  
  131.             if(i<0){  
  132.                 System.out.println("i值输入有误");  
  133.                 return 0;  
  134.             }  
  135.             while(temp.next!=null && j<i){  
  136.                 temp = temp.next;  
  137.                 j++;  
  138.             }  
  139.             int n = temp.next.data;  
  140.             temp.next = temp.next.next;  
  141.             size--;  
  142.               
  143.             return n;  
  144.         }  
  145.   
  146.         @Override//列表的清空  
  147.         public void ListClear() {  
  148.             Node temp = head.next;  
  149.             while(head.next!=null){  
  150.                 head.next = temp.next;  
  151.                 temp = null;  
  152.                 temp = head.next;  
  153.                 size--;  
  154.             }  
  155.               
  156.               
  157.         }  
  158.           
  159.           
  160.           
  161.           
  162.           
  163.     }  
  164. }  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值