您的位置:首页 > 编程语言 > Java开发

Java单链表增删改查反转基本操作

2017-09-21 14:25 405 查看
数据结构复习,代码是最好的说明。

节点类:

public class Node {

private Object object;

private Node next;

public Node(Object object) {
this.object = object;
next = null;
}

public Object getObject() {
return object;
}

public void setObject(Object object) {
this.object = object;
}

public Node getNext() {
return next;
}

public void setNext(Node next) {
this.next = next;
}
}链表类:
public class SingleLinkedList {

//头节点
private Node head;

//链表长度
private int size;

public SingleLinkedList() {
head = null;
size = 0;
}

/**
* 头插入
* @param o
*/
public void addNewHead(Object o){
N
4000
ode newHead = new Node(o);
newHead.setNext(head);
this.setHead(newHead);
size++;

}

/**
* 头删除
*/
public void deleteHead(){
if(size==0){
return;
}
head=head.getNext();
size--;
}

/**
* 指定index插入
* @param index
* @param object
*/
public void add(int index,Object object){
if(index>size){
return;
}

if (index==0){
addNewHead(object);
return;
}

Node temp=head;
while (index>1){
temp = temp.getNext();
index--;
}
Node node=new Node(object);
node.setNext(temp.getNext());
temp.setNext(node);
size++;
}

/**
* 指定index删除,修改、查询方法同理
* @param index
*/
public void delete(int index){
if(index>=size){
return;
}

if (index==0){
deleteHead();
return;
}

Node temp=head;
while (index>1){
temp = temp.getNext();
index--;
}

temp.setNext(temp.getNext().getNext());
size--;

}

/**
* 尾插入
* @param o
*/
public void append(Object o){
add(size,o);
}

/**
* 顺序输出、逆序压栈
*/
public void printAllNode(){
if(size==0){
return;
}

Node temp = head;
while (temp.getNext()!=null){
System.out.print(temp.getObject().toString()+"->");
temp = temp.getNext();
}
System.out.print(temp.getObject().toString());
System.out.println();
}

/**
* 递归反转,思想:右节点递归,左右节点指向反转
* @return
*/
public Node reverseR(Node head){
if (head==null||head.getNext()==null){
return head;
}

Node reversedHead=reverseR(head.getNext());

head.getNext().setNext(head);
head.setNext(null);

return reversedHead;

}

/**
* 遍历反转,利用前节点、当前节点、后节点遍历链表,每次前节点与当前节点指向反转,最后头尾反转
*/
public void reverse(){
if (head==null||head.getNext()==null){
return;
}

Node pre = head;
Node cur = head.getNext();
Node next;
while (cur!=null){
next = cur.getNext();
cur.setNext(pre);

pre = cur;
cur = next;

}
head.setNext(null);
head = pre;
}

public Node getHead() {
return head;
}

public void setHead(Node head) {
this.head = head;
}

public int getSize() {
return size;
}

public void setSize(int size) {
this.size = size;
}

}链表反转有参考http://www.cnblogs.com/iamkk/p/5971252.html
如有错误,欢迎纠正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 单链表