前插,思路分析
代码实现
后插,代码实现
// 3. 单链表反转,后插 public SingleList averLinkList(SingleList singleList) { // 1. 创建一个新的头节点 HeroLink newHeroLinkHead = new HeroLink(0, "", ""); // 2. 遍历原来的链表,每次取第一个元素,插入到新的头节点的第一个元素的位置 // 判断链表是否为空 if (singleList.getHead().next == null) { System.out.println("链表为空!!!"); return null; } // 传来的单链表的指针 HeroLink temp = singleList.getHead(); // 新的单链表的指针 HeroLink newTemp = newHeroLinkHead; // 开始遍历 while (temp.next != null) { while (true) { if (temp.next.next == null) { // 遍历到最后一个节点的头一个节点,取出最后一个节点 newTemp.next = temp.next; temp.next = null; newTemp = newTemp.next; break; } temp = temp.next; } // 重置指针,开始下一次遍历 temp = singleList.getHead(); } // 传来链表的头节点指向,新链表的头节点 singleList.getHead().next = newHeroLinkHead.next; return singleList; }思路分析
代码实现
// 4. 逆序打印单链表 public void reverseShow(SingleList singleList) { // 判断链表是否为空 if (singleList.getHead().next == null) { System.out.println("链表为空!!!"); return; } // 传来的单链表的指针 HeroLink temp = singleList.getHead(); // 用栈来存储数据 Stack<HeroLink> stack = new Stack<>(); while (temp.next != null) { stack.push(temp.next); //压入栈中 temp = temp.next; } // 打印栈 while (stack.size() > 0) { System.out.println(stack.pop()); } }测试结果