本篇采用“插入法”来解决这个问题
先给出链表结构:
public class LNode {
int data;
LNode next;
}
插入法就是从链表的第二个节点开始,依次插入到head头的下一个引用上,并把第一个节点作为整个链表的尾部,即将它的下一个节点引用设置为null.
具体操作如下,假如我们有head->1->2->3->4->5这样一个链表:
- 先设置当前节点为第二个节点,并将节点1的下一个引用置为null;
cur = head.next.next; //当前节点
head.next.next = null; //将
-
将节点2的下一个引用设置为1
-
将head的下一个引用设置为2
-
将cur指针后移,以此类推完成上述的插入操作
之后的3,4,5三个元素依次插入head的尾部,即可实现链表逆序。
Java代码如下:
/**
* @author F3ver1
* @Description 插入法,从链表第二个元素开始,插入到head尾部,并把第一个节点作为整个链表的尾
* @date 2019/4/14 19:42
*/
public class Main {
public static void reverse(LNode head) {
if (head == null || head.next == null) {
return;
}
LNode cur = null;
LNode next = null;
cur = head.next.next;
head.next.next = null;
//head-->1-->2-->3-->4
//head-->2-->1-->3-->4
while (cur != null) {
//这步是为了记录下个节点的值
next = cur.next;
//上述图中的几步操作
cur.next = head.next;
head.next = cur;
cur = next;
}
}
public static void main(String[] args) {
LNode head = new LNode();
head.next = null;
LNode tmp = null;
LNode cur = head;
//构造单链表
for (int i = 1; i <= 5; i++) {
tmp = new LNode();
tmp.data = i;
tmp.next = null;
cur.next = tmp;
cur = tmp;
}
for (cur = head.next; cur != null; cur = cur.next) {
System.out.print(cur.data + " ");
}
reverse(head);
System.out.print("\n");
for (cur = head.next; cur != null; cur = cur.next) {
System.out.print(cur.data + " ");
}
}
}
结果输出:
1 2 3 4 5
5 4 3 2 1