描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
示例1
输入:
{1,2,3}
复制返回值:
{3,2,1}
代码:
package student1;
import java.util.Enumeration;
import java.util.Stack;
class ListNode {
int val;
ListNode next=null;
public ListNode(int val){
this.val=val;
}
}
public class MyTest2 {
public static void main(String[] args) {
//创建一个简易链表
ListNode ln1=new ListNode(1);
ListNode ln2=new ListNode(2);
ListNode ln3=new ListNode(3);
// ListNode ln4=new ListNode(4);
ListNode ln=ln1;
ln1.next=ln2;
ln2.next=ln3;
ln3.next=null;
// ln4.next=null;
Stack<ListNode> stack=new Stack<>();
while(ln!=null) {
stack.push(ln);
ln=ln.next;
}
if(stack.empty()) {
System.out.print("栈为空");
}else {
//得到stack枚举对象
Enumeration<ListNode> elements = stack.elements();
while(elements.hasMoreElements()) {
System.out.print(elements.nextElement().val);//显示枚举元素-单元
System.out.println("");
}
}
//取出栈顶元素
int j=1;
ListNode cru = stack.pop();
//System.out.print(cru.val+"\n");
ListNode emp=cru;
while(!stack.empty()) {
ListNode pop = stack.pop();
cru.next=pop;
cru=cru.next;
// pop.next=pop;
j=j+1;
}
// System.out.print(j+"\n");
//一旦成链表,遍历时,就不能用头节点进行操作了,不然会改变头节点值
for(int i=0;i<j;i++) {
System.out.print(emp.val);
System.out.println("");
emp=emp.next;
}
}
}
运行结果: