题目:输入一个链表头节点,反转链表,并输出反转后链表的头节点
方法:防止链表断开找不到后续,需要三个指针。遍历链表,第一个指针f1指向当前遍历节点的前一个节点,第二个f2指针指向当前节点,第三个指针f3指向当前节点的后一个节点。
定义头节点
class ListNode{
int val;
ListNode next;
public ListNode(int a) {
this.val=a;
}
}
反转链表
public ListNode reverse(ListNode node) {
ListNode f1=null;
ListNode f2=node;
ListNode f3=null;
if(node==null)return null;//头节点空
if(f2.next==null)return node;//只有一个节点
while(f2!=null) {
f3=f2.next;//保存当前遍历节点后一个节点
f2.next=f1;
f1=f2;
if(f3==null)return f2;//当前遍历的节点是输入链表的尾节点,则将是新链表的头节点
f2=f3;
}
return null;
}