我的Java数据结构学习-4-3---链表 (大厂面试题)
//获取到单链表节点的有效个数(带头结点的需要不统计头节点) public int getLinkedLength(HeroNode head) { if (head.next == null) {//空链表 return 0; } int length = 0; //定义一个辅助指针,不要统计头节点。 HeroNode cur = head.next; while (cur != null) { length++; cur = cur.next;//遍历 } return length; } //查找单链表的倒数第K个节点。 public HeroNode getLastIndexNode(HeroNode head, int LastIndex) { if (head.next == null) { return null;//没有找到 } //得到链表长度(有效个数) int size = getLinkedLength(head); //倒数转换为顺序数 if (LastIndex <= 0 || LastIndex > size) { return null;//找不到 } HeroNode temp = head.next; for (int i = 0; i < size - LastIndex; i++) { temp = temp.next; } return temp; } //链表节点反转 public void reverseLinkedList(HeroNode head) { //当前链表为空,或者只有一个节点,无需反转 if (head.next == null || head.next.next == null) { return ; } HeroNode cur = head.next; HeroNode nextNode = null;//指向当前节点的下一个节点。 HeroNode reverseHead = new HeroNode(0, "", ""); //遍历原来的链表,并取出存放在新的链表里面(reverseHead) while (cur != null) { nextNode = cur.next;//保存当前节点的下一个节点。 cur.next = reverseHead.next;//将cur的下一个系欸但指向新的链表的头部。 reverseHead.next = cur; cur = nextNode; } //将head。next指向reverseNde head.next = reverseHead.next; }
链表逆序打印:采用栈机制()
//使用栈stack(后进先出),逆序打印 public void reversePrintf(HeroNode head) { if (head.next == null) { System.out.println("空链表不能打印"); return; } Stack<HeroNode> stack = new Stack<>(); HeroNode cur = head.next; //将链表的所有节点压入栈 while (cur != null) { stack.push(cur);//压入 cur = cur.next;//指针后移 } //遍历将栈中的节点打印()pop while (stack.size() > 0) { System.out.println(stack.pop());//出栈打印 } }
作者:隔壁老郭
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
Java入门到入坟
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!