有傀儡节点实现单链表
1、isEmpty()实现判断链表是否为空
2、toString()实现将链表元素序列化成一个字符串
3、printList()实现将链表元素依次打印出来
4、findLastNode()实现找到链表的最后一个结点
5、 size()实现计算链表长度
public class LinkedList {
//傀儡节点
private Node head=new Node();
//判断是否为空
public boolean isEmpty(){
if (head.next==null)
return true;
return false;
}
@Override
//toString
public String toString(){
if (isEmpty())
return "空串";
String str="[";
Node temp=head.next;
while(true){
str+=temp.val;
if (temp.next!=null){
str+=",";
temp=temp.next;
}else{
break;
}
}
str+="]";
return str;
}
//打印每个元素
public void printList(){
if (isEmpty())
return ;
Node temp=head.next;
while(true){
if (temp.next!=null){
System.out.print(temp.val+",");
temp=temp.next;
}else{
System.out.print(temp.val);
break;
}
}
}
//通过遍历,找到链表的最后一个结点
public String findLastNode(){
if (isEmpty())
return "空链表";
Node temp=head.next;
while(true){
if (temp.next!=null)
temp=temp.next;
else{
return (temp.val)+"";
}
}
}
//通过遍历,找到链表的倒数第二个结点
public String findLastSecondNode(){
if (isEmpty() || head.next.next==null)
return "不存在倒数第二个节点";
Node temp=head.next;
while(true){
if(temp.next.next==null){
return temp.val+"";
}else {
temp=temp.next;
}
}
}
//通过遍历,找到链表的第 n 个结点。(链表的长度 >= n)
public String findNodeN(int n){
if (n>size()){
return "越界";
}
Node temp=head;
int i = 0;
for (; i < n; i++) {
temp=temp.next;
}
return temp.val+"";
}
//通过遍历,计算链表中元素的个数。
public int size(){
int flag=0;
Node temp=head.next;
while(true){
if (temp!=null){
flag++;
temp=temp.next;
}else
break;
}
return flag;
}
//通过遍历,找到链表中是否包含某个元素。
public boolean findElem(int elem){
if (isEmpty())
return false;
Node temp=head.next;
for (int i = 0; i < size(); i++) {
if (temp.val==elem){
return true;
}
}
return false;
}
//1、增
//添加到末尾
public void add(Node newNode){
Node temp=head;
while(true){
if (temp.next!=null){
temp=temp.next;
}else{
temp.next=newNode;
break;
}
}
}
//添加到指定位置
public void addIndex(int index,Node newNode){
if (isEmpty())
return;
Node pre=head;
for (int i = 0; i < size(); i++) {
if (index==i){
newNode.next=pre.next;
pre.next=newNode;
break;
}
pre=pre.next;
}
}
//2、删
//删除指定下标
public boolean deleteIndexNode(int index){
if (isEmpty())
return false;
Node pre=head;
Node temp=pre.next;
for (int i = 0; i < size(); i++) {
if (i==index){
pre.next=temp.next;
}
pre=pre.next;
temp=temp.next;
return true;
}
return false;
}
//删除指定值
public boolean deleteElemNode(int elem){
if (isEmpty())
return false;
Node temp=head.next;
int i=0;
for (i = 0; i < size(); i++) {
if (temp.val==elem){
return true;
}
}
return false;
}
//删除末尾
public boolean deleteLastNode(){
if (isEmpty())
return false;
Node temp=head.next;
while (true){
if (temp.next.next==null){
temp.next=null;
return true;
}
temp=temp.next;
}
}
}