完整的单链表的反转:
package javafirst;
import javafirst.Solution.ListNode;
//链表的赋值
public class Main {
public static void main(String[] args) {
ListNode head = new ListNode(3);
ListNode node1 = new ListNode(5);
ListNode node2 = new ListNode(6);
ListNode node3 = new ListNode(9);
ListNode node4 = new ListNode(7);
ListNode node5 = new ListNode(2);
ListNode node6 = new ListNode(1);
ListNode node7 = new ListNode(12);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
node6.next = node7;
printList(head);
printList(reverseNode(head))
} //自己对链表结点,指针和值的定义
public static class ListNode
{
int val;
ListNode next;
public ListNode(int x){
val=x;
}
}
public static void printList(ListNode head) {
while (head != null) {
System.out.print(head.val + " ");
head = head.next; //不能粗心大意
}
System.out.println();
}
//函数名的书写,从第二个单词的首字母开始大写,而类的每个单词的首字母大写,小常识。
public static ListNode reverseNode(ListNode head){// 如果链表为空或只有一个节点,无需反转,直接返回原链表表头
if(head == null || head.next == null)
return head;
ListNode reHead = null;
ListNode cur = head;
while(cur!=null){
ListNode reCur = cur; // 用reCur保存住对要处理节点的引用
cur = cur.next; // cur更新到下一个节点
reCur.next = reHead; // 更新要处理节点的next引用
reHead = reCur; // reHead指向要处理节点的前一个节点
}
return reHead;
}
}