输入一个链表,反转链表后,输出新链表的表头。
- 思路
把它们分成两部分: 未反转部分(一条链表) 和 已反转部分(别外一条链表)。
这两部分是断开的,注意保存这两条链表的头节点。
原链表:A -> B -> C -> D -> E
(已反转部分)A<-B <-C (断开) D-> E (未反转部分)
准备两个空结点 next节点和pre节点:
next节点:用来保存未反转部分的头节点
pre节点:用来保存已反转部分的头节点
然后把未反转部分的头节点取下来,用头插法插到已反转部分
第一步:
未反转部分:B -> C -> D -> E (取出A节点)
已反转部分:A (头插法插入)
第二步:
未反转部分:C -> D -> E (取出B节点)
已反转部分:B -> A (头插法插入)
…循环
最后:E -> D-> C -> B -> A
public ListNode ReverseList(ListNode head) {
if(head==null) //鲁棒性
return null;
ListNode next = null;
ListNode pre = null;
while(head!=null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}