版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://cloud.tencent.com/developer/article/1551771
反转一个单链表,此题为面试高频题。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
假设列表的其余部分已经被反转,现在我该如何反转它前面的部分?
public ListNode reverseList(ListNode head) {
//终止条件
if(head == null || head.next == null){
return head;
}
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
对于链表中的每一个元素,只需将当前节点的 next 指针改为指向前一个元素,就可完成链表反转。需要保存这个元素的上一个元素lastNode,以及当前指针所在的节点。
public ListNode reverseList(ListNode head) {
return reverseList(null,head);
}
public ListNode reverseList(ListNode lastNode, ListNode curr) {
if(curr == null){
return lastNode;
}
ListNode next = curr.next;
curr.next = lastNode;
return reverseList(curr, next);
}
解法二的循环写法。
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode curr = head;
ListNode temp;
while (curr != null) {
temp = curr.next;
curr.next = pre;
pre = curr;
curr = temp;
}
return pre;
}