1找出链表中倒数第k个数
定于两个相差k个的指针,前面的指针的next()为null时,后面的指针为所求;
两次便利,求总长,总长减去k;
便利每个节点是否便利k次到达链表尾部,
2 实现链表反转
node=head;
pre=null;{
next=node.next;
node.next=pre;
pre=node;
node=next;
}
3 .从尾到头输出的单链表
栈;
递归:
void A(Node node){
if(node!=null){
A(node.next);
print(node.data);
}
}
4.求链表中间的节点(n/2)
定义两个指针,一个走2个next,一个走1个next,第一个到链尾时候,第二个到中间。
5.判断链表是否有环
两个指针,块的追到慢的,则有环。
6.在不知道头指针的情况下删除指定节点
尾节点无法删除,不是尾节点时,交换这个节点与后继节点的值,删除后继节点
delete(Node node){
int temp=node.data;
node.date=node.next.data;
node.next.data=temp;
node.next=node.next.next;
}
7.判断两个链表是否相交
有相同的尾节点是 相交。
寻找相交的第一个节点
计算两个链表的长度 a,b
len=a-b;
链表1便利到len时候,两个表一起便利,遇到相同的节点是第一个相交节点