出现的问题
1、单链表的反转。需要保存的是当前节点的next节点,而不是当前节点,否则用.属性名的方式修改next域之后,原链表仍然会断掉
2、从尾到头打印链表这个题目中不能在for循环当中作栈的pop操作,因为stack的size是会发生变化的
3、双链表自我删除时,temp.next.pre==temp.pre需要加判断来避免要删除的是最后一个节点
4、环形链表的构建时,For循环的条件取值需要注意,保障临时指针,在首节点first的取值之前(i==1),是不参与构建的
5、约瑟夫问题之所以需要双指针,是因为一个要用于定位出队的节点,另一个用于在新的环形链表中“咬”住first;同时,要注意从k开始数,数m个数,这两个做for循环时判断条件的数量都需要减1
public void josephy(int k,int m,int nums){
Tea temp = first;
while (temp.next!=first){
temp = temp.next;
}
for (int i = 1; i < k; i++) {
first = first.next;
temp = temp.next;
}
while (true){
if (first.next ==first){
System.out.printf("最后留在圈中的节点编号是:");
System.out.println(first);
break;
}
for (int i = 1; i < m; i++) {
first = first.next;
temp = temp.next;
}
System.out.println(first);
first = first.next;
temp.next = first;
}
}