本文共 4226 字,大约阅读时间需要 14 分钟。
链表是一种基于物理存储单元的非连续数据结构。通过引用链接,数据元素的逻辑顺序被实现。
void addFirst()
通过头插法插入新节点到链表头部。void addLast()
通过尾插法插入新节点到链表尾部。void addIndex(int index, int data)
根据指定索引插入新节点,索引为0号起始。boolean contains(int key)
检查链表中是否包含指定键的节点。void remove(int key)
删除第一次出现的指定键的节点。void removeAll(int key)
删除所有包含指定键的节点。class ListNode { public int val; public ListNode next; public ListNode(int val) { this.val = val; }}public class MyLinkedList { public ListNode head; public MyLinkedList() { } // 头插法 public void addFirst(int data) { ListNode node = new ListNode(data); if (head == null) { head = node; } else { node.next = head; head = node; } } // 尾插法 public void addLast(int data) { ListNode node = new ListNode(data); if (head == null) { head = node; } else { ListNode cur = head; while (cur.next != null) { cur = cur.next; } cur.next = node; } } // 指定位置插入 public void addIndex(int index, int data) { if (index < 0 || index > size()) { System.out.println("插入位置无效!" + " 请确保索引在0到" + size() + "之间"); return; } ListNode node = new ListNode(data); if (head == null) { return; } if (index == 0) { addFirst(data); } else if (index == size() - 1) { addLast(data); } else { ListNode prev = searchPrev(index); node.next = prev.next; prev.next = node; } } // 判断是否包含元素 public boolean contains(int key) { ListNode cur = head; if (head == null) { return false; } while (cur != null) { if (cur.val == key) { return true; } cur = cur.next; } return false; } // 删第一次出现的key public void remove(int key) { if (head.val == key) { head = head.next; } else { ListNode prev = searchPrev2(key); if (prev == null) { return; } while (head != null) { if (head.val == key) { prev.next = head.next; head = head.next; } else { head = head.next; } } } } // 删所有key public void removeAllKey(int key) { if (head == null) { return; } if (head.val == key) { head = head.next; } ListNode cur = head; while (cur != null) { if (cur.val == key) { ListNode prev = searchPrev2(key); if (prev != null) { prev.next = cur.next; } } cur = cur.next; } } public int size() { int count = 0; ListNode cur = head; while (cur != null) { count++; cur = cur.next; } return count; } // 打印链表内容 public void display() { if (head == null) { System.out.println("链表为空!"); return; } ListNode cur = head; while (cur != null) { System.out.print(cur.val + " "); cur = cur.next; } System.out.println(); } // 清空链表 public void clear() { head = null; } public static void main(String[] args) { MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addFirst(33); myLinkedList.addFirst(33); myLinkedList.addFirst(22); myLinkedList.addFirst(44); myLinkedList.addFirst(33); myLinkedList.display(); myLinkedList.addLast(88); myLinkedList.display(); System.out.println(myLinkedList.contains(111)); myLinkedList.remove(33); myLinkedList.display(); myLinkedList.removeAllKey(33); myLinkedList.display(); myLinkedList.addIndex(7, 99); myLinkedList.display(); System.out.println(myLinkedList.size()); }}
转载地址:http://bogoz.baihongyu.com/