1. 永不为空的循环链表
第一次插入:head.next=head;
在x后插入t: t.next=x.next;x.next=t;
移走x之后的节点:x.next=x.next.next;
循环遍历:
t=head;
do{…t=t.next;}while (t!=head);
检查是否只有一个数据项:
If(head.next==head);
2. 头指针初始化为null,尾指针为null,其实就是非循环单链表
初始化:head=null;
在x后插入t:
if(x==null){head=t;head.next=null;}
else{t.next=x.next;x.next=t}
移走x之后的节点:x.next=x.next.next;
循环遍历:
for(t=head;t!=null;t=t.next);
检查是否为空:if(head==null);
3. 哑头节点, 尾指针为null,其实就是带哑头节点非循环单链表
初始化:head=new Node();head.next=null;
在x后插入t: t.next=x.next;x.next=t;
移走x之后的节点:x.next=x.next.next;
循环遍历:
for(t=head.next;t!=null;t=t.next);
检查是否为空:if(head.next==null);
4.哑头节点,哑尾节点
初始化:head=new Node();
z=new Node();
head.next=z; z.next=z;
在x后插入t: t.next=x.next;x.next=t;
移走x之后的节点:x.next=x.next.next;
循环遍历:
for(t=head.next;t!=z;t=t.next);
检查是否为空:if(head.next==z);
注意:使用哑头节点时,很多情况下,编码会比较简单.
第一次插入:head.next=head;
在x后插入t: t.next=x.next;x.next=t;
移走x之后的节点:x.next=x.next.next;
循环遍历:
t=head;
do{…t=t.next;}while (t!=head);
检查是否只有一个数据项:
If(head.next==head);
2. 头指针初始化为null,尾指针为null,其实就是非循环单链表
初始化:head=null;
在x后插入t:
if(x==null){head=t;head.next=null;}
else{t.next=x.next;x.next=t}
移走x之后的节点:x.next=x.next.next;
循环遍历:
for(t=head;t!=null;t=t.next);
检查是否为空:if(head==null);
3. 哑头节点, 尾指针为null,其实就是带哑头节点非循环单链表
初始化:head=new Node();head.next=null;
在x后插入t: t.next=x.next;x.next=t;
移走x之后的节点:x.next=x.next.next;
循环遍历:
for(t=head.next;t!=null;t=t.next);
检查是否为空:if(head.next==null);
4.哑头节点,哑尾节点
初始化:head=new Node();
z=new Node();
head.next=z; z.next=z;
在x后插入t: t.next=x.next;x.next=t;
移走x之后的节点:x.next=x.next.next;
循环遍历:
for(t=head.next;t!=z;t=t.next);
检查是否为空:if(head.next==z);
注意:使用哑头节点时,很多情况下,编码会比较简单.