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
如有错误,欢迎纠正!
节点类:
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单链表基本操作(四)--单链表反转
- 链表的java实现以及基本的增加,删除,排序操作
- JAVA中关于链表的操作和基本算法
- java版的单向链表的基本操作
- JAVA中关于链表的操作和基本算法
- javaweb框架之Hibernate3.6.0增删查该基本操作与Junit测试类
- 不带头节点的单链表及其基本操作(Java实现)
- JAVA中关于链表的操作和基本算法
- java 单向链表的基本操作
- java单向链表基本操作简单实现
- 数据结构之链表的增删操作的Java实现
- 链表的基本操作与拓展操作(Java语言实现)
- JAVA中关于链表的操作和基本算法
- JAVA中关于链表的操作和基本算法
- Java单链表基本操作(九)--交换相邻节点对的值
- 数据结构(二):Java实现:链表实现增删查操作(具有头结点)
- java链表的基本操作
- java模拟LinkedList实现双链表,完成基本操作
- 16.单向链表的一些基本操作实现(链表反转,链表有环无环判断,链表冒泡排序,链表快速排序)
- java描述链表基本操作