链表介绍
单向链表
单向链表节点结构
public class Node {
public int value;
public Node next;•
public Node(int data) {
value = data;
}
}
双向链表
双向链表节点结构
public class DoubleNode {
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data) {
value = data;
}
}
单链表和双链表如何反转
/**
* 单链表反转
* @param head
* @return
*/
private static Node reverseNodeList(Node head) {
Node pre=null;
Node next=null;
while(head!=null){
next=head.next;
head.next=pre;
pre=head;
head=next;
}
return pre;
}
/**
* 双链表反转
* @param head
* @return
*/
public static DoubleNode reverseDoubleNode(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;
}
把给定值都删除
/**
* 删除链表中的某一个值
* @param head
* @param num
* @return
*/
public static Node deleteNode(Node head,int num){
while (head!=null){
if (head.value!=num){ //头结点是否需要删除
break;
}
head=head.next;
}
Node pre=head;
Node next=head;
while(next!=null){
if (next.value==num){
pre.next=next.next;
}else{
pre=next;
}
next=next.next;
}
return head;
}