工作了好几个月了,发现自己工作更多的接触的是业务以及组件方面的东西,算法并没有太多机会复习到,然而扎实的算法功底是一个工程师的必须技能,这方面以前在学校也是学的一团糟,这里就利用业余机会把这些知识好好巩固一边吧
首先第一课,实现一个单链表(不难,但是很容易出错)
package myowndataStructures;
/**
* Created by xudong on 2019/5/10.
*/
public class SinglyLinkedList {
private Nodes head;
//链表头部插入
public void insertHead(int value){
Nodes newNode = new Nodes(value);
newNode.next = head;
head = newNode;
}
public void deleteHead(){
if(isEmpty()){
System.out.println("this is a empty list");
}else {
head = head.next;
}
}
//指定位置插入
public void insertNth(int index, int value){
if(index > 0 && index < size()){
Nodes newNode = new Nodes(value);
Nodes beforeNode = head;
for(int i = 0; i < index-1; i++){
beforeNode = beforeNode.next;
}
newNode.next = beforeNode.next;
beforeNode.next = newNode;
}else if( index == 0){
insertHead(value);
} else {
System.out.println("the index is not right");
}
}
public void deleteNth(int index){
if(index >= size() || index < 0){
System.out.println("the index is out of size");
}else if(index == 0){
deleteHead();
}else {
Nodes preNode = head;
for(int i = 0; i < index - 1; i++){
preNode = preNode.next;
}
preNode.next = preNode.next.next;
}
}
public boolean isEmpty(){
return size() == 0;
}
public String display(){
String result = "";
Nodes currentNode = head;
while (currentNode != null){
result = result + currentNode.value + "->";
currentNode = currentNode.next;
}
return result;
}
public int size(){
if(head == null){
return 0;
}else {
Nodes markedNode = head;
int i = 1;
while (markedNode.next != null){
i++;
markedNode = markedNode.next;
}
return i;
}
}
public static void main(String[] args) {
SinglyLinkedList list1 = new SinglyLinkedList();
list1.insertHead(11);
list1.insertHead(12);
list1.deleteHead();
System.out.println(list1.display());
list1.insertHead(1);
list1.insertNth(1, 2);
list1.insertNth(2,3);
list1.insertNth(3,4);
System.out.println(list1.display());
list1.deleteNth(3);
System.out.println(list1.display());
System.out.println(list1.isEmpty());
System.out.println(list1.size());
}
}
class Nodes {
int value;
Nodes next;
public Nodes(int value){
this.value = value;
this.next = null;
}
}