反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
具体实现
**解题思路:**采用的是断链法,直接断掉指向当前结点的链,然后反过来指向它。如//1->2->3->4->5 变成//1<-2<-3 4->5
- 当前结点是head,定义两个结点,res为当前结点的前一节点,next为当前结点的下一结点
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null)
return null;
ListNode res = null, next = null,flag = null;
while(head != null) {
next = head.next;//先用next保存head的下一个节点的信息,保证单链表不会因为失去head节点的原next节点而就此断裂
if(next == null)//防止出现只有一个结点的情况,也是循环最后的结果。
flag = head;
head.next = res;//保存完next,就可以让head从指向next变成指向res了,
//让res,head,next依次向后移动一个节点,继续下一次的指针反转
res = head;
head = next;
//next在下次循环再移动。
}
return flag;//注意此时结果是flag,res也是结果,head和next此时指向是null的;
}
}