单链表
定义
private int size;
private Node head;
class Node{
int val;
Node next;
public Node(int val){
this.val = val;
}
private boolean rangeCheck(int index) {
if(index < 0 || index >size){
return false;
}else{
return true;
}
}
public String toString(){
String ret = "";
Node node = head;
while (node != null){
ret += node.val;
ret += "--->";
node = node.next;
}
ret += "Null";
return ret;
}
}
头插
public void addFirst(int val){
Node node = new Node(val);
if(head == null){
head = node;
}else{
node.next = head;
head = node;
}
size ++;
任意位置插入
public void addIndex(int index,int val){
if(index < 0 || index > size){
System.out.println("add index illegal");
return;
}
if(index == 0){
addFirst(val);
return;
}
Node node = new Node(val);
Node prev = head;
for (int i = 0; i < index - 1; i++) {
prev = prev.next;
}
node.next = prev.next;
prev.next = node;
size++;
}
public void addLast(int val){
addIndex(size,val);
}
查找(根据输入的index值,查找对应的值val)
public int get(int index){
if(rangeCheck(index)){
Node node =head;
for (int i = 0; i < index; i++) {
node = node.next;
}
return node.val;
}else{
System.err.println("get index illegal!");
return -1;
}
}
判断当前链表是否包含val值的index
public boolean contains(int val){
for(Node temp = head;temp != null;temp = temp.next){
if(temp.val == val){
return true;
}
}
return false;
}
修改index的值val为newVal
public int set(int index,int newVal){
if(rangeCheck(index)){
Node node = head;
for (int i = 0; i < index; i++) {
node = node.next;
}
int oldVal = node.val;
node.val = newVal;
return oldVal;
}else{
System.err.println("index is illegal!");
return -1;
}
}
删除操作
public void removeIndex(int index){
if(rangeCheck(index)){
Node prev = head;
for (int i = 0; i < index- 1 ; i++) {
prev = prev.next;
}
Node node = head;
for (int i = 0; i < index; i++) {
node = node.next;
}
Node houji = node.next;
prev.next = houji;
node.next=null;
size --;
}else{
System.err.println("remove index illegal!");
}
}
public void removeFirst(){
removeIndex(0);
}
public void removeLast(){
removeIndex(size - 1);
}
public void removeValueOnce(int val){
if(head!=null && head.val == val){
Node temp = head;
head = temp.next;
temp.next = null;
size --;
}else{
Node prev = head;
while(prev.next != null){
if(prev.next.val == val){
Node cur = prev.next;
prev.next = cur.next;
cur.next = null;
size --;
return;
}else{
prev = prev.next;
}
}
}
}
Leecode82 删除所有重复节点(含虚拟头节点)
package seqlist.leecode;
public class Num82 {
public class ListNode{
int val;
ListNode next;
ListNode(){};
ListNode(int val){
this.val = val;
}
ListNode(int val,ListNode next){
this.val = val;
this.next = next;
}
}
public ListNode deleteDuplicates(ListNode head) {
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode temp = dummyHead;
ListNode node = temp.next;
while (node != null) {
ListNode cur = node.next;
if (cur == null) {
return dummyHead.next;
}else{
if(cur.val == node.val){
while (cur != null && cur.val == node.val){
cur = cur.next;
}
node = cur;
temp.next = cur;
}else {
temp = temp.next;
node = node.next;
}
}
}
return dummyHead.next;
}
}
Leecode83 删除重复节点,只保留一个(含虚拟头节点)
在这里插入代码片package seqlist.leecode;
public class Num83 {
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public ListNode deleteDuplicates(ListNode head) {
ListNode dummyHead = new ListNode(-101);
dummyHead.next = head;
ListNode prev = dummyHead;
ListNode cur = prev.next;
while (cur != null){
if(prev.val == cur.val){
prev.next = cur.next;
}else{
prev = prev.next;
}
cur = cur.next;
}
return dummyHead.next;
}
}