链表
单链表结构:
public static class Node{ public int value; public Node next; public Node(int data){ value=data; } }
双链表结构
public static class DoubleNode{ public int value; public DoubleNode last; public DoubleNode next; public DoubleNode (int data){ value=data; } }
反转链表
public static Node reverseLinkedList(Node head){ Node next=null; Node pre=null; while(head!=null){ next=head.next; head.next=pre; pre=head; head=next; } return pre; }
反转双链表
public static DoubleNode reverseDoubleList(DoubleNode head){ DoubleNode pre=null; DoubleNode next=null; while(head!=null){ next=head.next; head.next=pre; head.last=next; pre=head; head=next; } return pre; }
删除链表指定节点
需要判断第一个是不是要删除的节点,假如话说第一个节点就需要删除,则需要换头部。
public static Node removeValue(Node head,int value){ while(head!=null){ if(head.value!=value){ break; } head=head.next; } Node pre=head; Node cur=head; while(cur!=null){ if(cur.value==value){ pre.next=cur.next; }else{ pre=cur; } cur=cur.next; } return head; }
栈和队列
实现最小栈
使用两个栈,一个栈记录此时的值,另一个栈记录此时的最小值。
用栈实现队列
两个栈实现,一个push栈,一个pop栈。
倒数据要一次性倒完。
哈希表和有序表
哈希表put一个数时,时间复杂度都是o(1)
哈希表用integer作键时,按值传递,不是按引用传递。