输入一个链表,反转链表后,输出新链表的表头。
循环
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)
return head == null ? null : head;
ListNode curNode = head,beforeNode = null,afterNode = null;
while(curNode != null) {
afterNode = curNode.next;
curNode.next = beforeNode;
if(afterNode == null) //最后一个节点
break;
beforeNode = curNode;
curNode = afterNode;
}
return curNode;
}
递归
ListNode reverseHead = null; //反转后的头结点
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)
return head == null ? null : head;
ReverseList(head,null);
return reverseHead;
}
private void ReverseList(ListNode curNode,ListNode beforeNode) {
if(curNode == null) {
res = beforeNode;
return;
}
ReverseList(curNode.next,curNode);
curNode.next = beforeNode;
}
或
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)
return head == null ? null : head;
ListNode res = ReverseList(head,null);
return res;
}
private ListNode ReverseList(ListNode curNode,ListNode beforeNode) {
if(curNode == null) {
return beforeNode;
}
ListNode res = ReverseList(curNode.next,curNode);
curNode.next = beforeNode;
return res;
}