今天风好大,大的吓人,可能这就是家乡风的脾气吧 2020.04.21
题目:
解题思路:
删除节点存在三种可能,和一种为了代码健壮的可能(即传入null值)
第一种:删除头结点,即返回头结点的下一个引用为头结点
第二种:删除尾节点,即让指向为节点的指针为空
第三种:删除中间节点,删除节点复制下一个节点内容,再指向下下个节点
package offer13;
class Node {
int value;
Node next = null;
public Node(int value) {
this.value = value;
}
public Node() {
}
}
class LinkedList {
Node rootNode = null;
public boolean insert(Node newNode) {
if(rootNode == null) {
rootNode = newNode;
return true;
}
Node currentNode = rootNode;
while(currentNode!=null) {
if(currentNode.next == null) {
currentNode.next = newNode;
return true;
}
currentNode = currentNode.next;
}
return false;
}
public void order() {
Node currentNode = rootNode;
while(currentNode != null) {
System.out.println("\t" + currentNode.value);
currentNode = currentNode.next;
}
}
/**
* @param headNode 头结点
* @param isDeleteNode 删除节点
* @return 头结点
*/
public Node deleteNode(Node headNode , Node isDeleteNode) {
if(headNode == null || isDeleteNode == null) {
return headNode;
}
if(headNode == isDeleteNode) {//删除头节点
headNode = headNode.next;
return headNode;
}
if(isDeleteNode.next == null) {//删除尾节点
Node currentNode = headNode;
while (currentNode.next != isDeleteNode) {
currentNode = currentNode.next;
}
currentNode.next = null;
}else {//删除中间节点
isDeleteNode.value = isDeleteNode.next.value;
isDeleteNode.next = isDeleteNode.next.next;
}
return rootNode;
}
}
public class DeleteLinkedNode {
public static void main(String[] args) {
LinkedList linkedList = new LinkedList();
Node head = new Node(1);
linkedList.insert(head);
linkedList.insert(new Node(2));
linkedList.insert(new Node(3));
Node middle = new Node(4);
linkedList.insert(middle);
linkedList.insert(new Node(5));
Node last = new Node(6);
linkedList.insert(last);
linkedList.order();
System.out.println();
linkedList.rootNode = linkedList.deleteNode(linkedList.rootNode, null);//删除参数为空
linkedList.order();
System.out.println();
linkedList.rootNode = linkedList.deleteNode(linkedList.rootNode, head);//删除头结点
linkedList.order();
System.out.println();
linkedList.rootNode = linkedList.deleteNode(linkedList.rootNode, middle);//删除中间结点
linkedList.order();
System.out.println();
linkedList.rootNode = linkedList.deleteNode(linkedList.rootNode, last);//删除尾结点
linkedList.order();
System.out.println();
}
}