题目
给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头
解题思路
利用栈的先进后出的特点,先将单链表元素依次入栈后在依次弹出生成新的单链表
步骤:
①创建一个栈数据结构
②遍历单链表并将元素push入栈
③将栈顶第一个元素pop出栈并作为新链表表头
④将栈中的元素依次pop出栈并生成新的单链表
注意:
栈底的最后一个元素作为单链表的尾节点,并且需要将next指向置空,否则会造成无限循环,因为这个元素来自于反转前的单链表表头next指向另一个节点的
示例代码
public class Solution{ public static void reverseListNode(ListNode head){ Stack<ListNode> stack = new Stack<>(); while(head!=null){ stack.push(head); head = head.next; } if(stack.isEmpty()){ return null; } ListNode node = stack.pop(); ListNode result = node; while(!stack.isEmpty()){ ListNode tempNode = stack.pop(); node.next = tempNode; node = node.next; } node.next = null; return result; } }
|
题目链接:
https://www.nowcoder.com/exam/oj?page=1&tab=%E7%AE%97%E6%B3%95%E7%AF%87&topicId=295