1、代码
package LinkList;
public class Linklist {
static class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
}
ListNode head;
ListNode tail;
int size;
public Linklist(){
head = null;
tail = null;
size = 0;
}
public static void main(String[] args) {
Linklist newList = new Linklist();
newList.appendIntail(5);
newList.appendIntail(7);
newList.appendIntail(4);
newList.appendIntail(2);
newList.printList();
newList.appendInHead(30);
newList.appendInHead(27);
newList.insert(3,9);
newList.printList();
newList.deleteNode(9);
newList.printList();
newList.findInNumber(4);
newList.findInNumber(1);
newList.findInIndex(9);
newList.update(11,2);
newList.printList();
}
public void appendIntail(int number){
ListNode newNode = new ListNode(number);
if(tail == null){
tail = newNode;
head =newNode;
}else {
tail.next = newNode;
tail = newNode;
}
size++;
System.out.println("值为" + number +"的结点成功加入链表!");
}
public void appendInHead(int number){
ListNode newNode = new ListNode(number);
if(tail == null){
head = newNode;
tail = newNode;
System.out.println("头插法成功!");
}else {
newNode.next = head;
head = newNode;
System.out.println("头插法成功!");
}
}
public void insert(int position,int number){
if(position >size){
return;
}
ListNode newNode = new ListNode(number);
if(position == 0){
newNode.next=head;
head = newNode;
if(tail == null){
tail = newNode;
}
size++;
System.out.println("插入成功!");
} else if (position == size){
this.appendIntail(number);
System.out.println("插入成功!");
}else {
ListNode pre = head;
for(int i = 0;i < position-1;i++){
pre = pre.next;
}
newNode.next=pre.next;
pre.next = newNode;
size++;
System.out.println("插入成功!");
}
}
public void printList(){
System.out.print("链表:[");
ListNode cur = head;
while (cur != null){
if(cur.next == null){
System.out.println(cur.val +"]");
cur = cur.next;
return;
}
System.out.print(cur.val + ",");
cur = cur.next;
}
System.out.println(" ");
}
public void deleteNode(int number){
if(head !=null && head.val == number){
head = head.next;
size--;
if(size == 0){
tail = head;
}
System.out.println("删除成功,成功删除值为" + number + "的结点");
}else {
ListNode pre = head;
ListNode cur = head;
while (cur != null){
if(cur.val == number){
if (cur == tail){
pre.next = null;
tail = pre;
size--;
System.out.println("删除成功,成功删除值为" + number + "的结点");
return;
}else {
pre.next = cur.next;
size--;
System.out.println("删除成功,成功删除值为" + number + "的结点");
return;
}
}else {
pre = cur;
cur = cur.next;
}
}
System.out.println("删除失败,没有该结点");
return;
}
}
public void findInNumber(int number){
ListNode p = head;
while (p != null){
if(p.val == number){
System.out.println("查找成功!");
return;
}else {
p = p.next;
}
}
System.out.println("不存在该数,查找失败!");
return;
}
public void findInIndex(int index){
if(index > size){
System.out.println("查找失败,位置非法!");
}else {
ListNode cur = head;
int i = 0;
while (i < index){
cur = cur.next;
i++;
}
System.out.println("查找成功,查找到的数值为:" + cur.val);
}
}
public int update(int oldValue,int newValue){
int i = 1;
ListNode cur = head;
while (cur != null){
if(cur.val == oldValue){
cur.val = newValue;
System.out.println("更新成功!");
return i;
}else {
i++;
cur = cur.next;
}
}
System.out.println("更新失败!不存在值为" + oldValue + "的结点");
return -1;
}
}
2、结果