文章目录
一、链表插值练习
下面这个代码实现的是无环单链表的插入
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class InsertValue {
public ListNode insert(int[] A, int[] nxt, int val) {
// write code here
//如果A为空的情况
if(A == null){
return new ListNode(val);
}
//构建链表
ListNode head = new ListNode(A[0]);//头节点
ListNode cur = head;
for(int i = 0;i<A.length-1;i++){
ListNode node = new ListNode(A[nxt[i]]);
cur.next = node;
//node.next = cur.next;
cur = cur.next;
}
//将值等于val的节点加入到链表中
ListNode pre = head;
ListNode next = head.next;
ListNode newNode = new ListNode(val);
if(head.val >= val){
newNode.next = head;
//cur.next = newNode;
head = newNode;
return head;
}
while(next!=null){
if(next.val >= val){
pre.next = newNode;
newNode.next = next;
return head;
}else{
pre = next;
next = next.next;
}
}
newNode.next = next;
pre.next = newNode;
return head;
}
}
二、访问单个节点的删除练习题
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Remove {
public ListNode removeNode(ListNode pNode, int delVal) {
// write code here
if(pNode==null){
return null;
}
if(pNode.val == delVal){
return pNode.next;
}
ListNode pre = pNode;
ListNode cur = pNode.next; //被删除的节点
while(cur != null){
if(cur.val == delVal){
pre.next = cur.next;
break;
}
cur = cur.next;
pre = pre.next;
}
return pNode;
}
}
三、链表的分化练习题
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Divide {
public ListNode listDivide(ListNode head, int val) {
// write code here
ListNode sh = null;
ListNode st = null;
ListNode bh = null;
ListNode bt = null;
ListNode next = null;
while(head != null){
next = head.next;
head.next = null;
if(head.val <= val){
if(sh == null){
sh = head;
st = head;
}else{
st.next = head;
st = head;
}
}else{
if(bh == null){
bh = head;
bt = head;
}else{
bt.next = head;
bt