数据结构
第一章 单链表的反转及反向打印
一、反转单链表
/*
Node结构
class Node{
public int val;
public Node next;
public Node() {
}
public Node(int val) {
this.val = val;
}
@Override
public String toString() {
return "Node [val=" + val + ", next=" + next + "]";
}
}
*/
public void rev(Node head) {
Node nhead = new Node();
Node temp = head.next;//temp为链表的第一个节点
Node temp2;
while(true) {
if(temp==null) {
break;
}
/*
* temp当前指向节点a
* head->a->b->c
*/
temp2=temp;//定义一个辅助变量,记录当前temp指向节点a
temp=temp.next;//temp往后移,移到下一个节点b
temp2.next=nhead.next;//将a的next指向新链表的next
nhead.next=temp2;//将新链表的next指向节点a
//经过一次操作后,节点a加入到新链表的头部
}
head.next=nhead.next;//改变原头节点的指向
}
二、反向打印单链表
方法1:通过反转单链表,反转后直接打印输出
方法2:通过栈的先进后出机制,反向打印单链表
//方法二,通过栈反向打印
public void resPrint(Node head) {
Stack<Node> stack = new Stack<Node>();
Node temp = head.next;
while(temp!=null) {
stack.add(temp);//入栈
temp=temp.next;
}
while(stack.size()>0) {
System.out.println(stack.pop());//出栈
}
}