本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/45739753
Reverse a singly linked list.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
思路:
(1)题意为给定链表,将其(逆置)翻转。该题在校招笔试面试中出现频率较大。
(2)该题主要考察对链表中指针的考察,其实并不难。首先,考虑设定两个指针fis和sed,分别指向链表的第一个元素和第二个元素,其中fis指向结果链表,需在此将其next置为null;其次,循环对指向第二个元素的sed为空进行判定,如果不为空,则设定指针thd指向第三个元素,将sed的next指向fis,这样就完成了前两个元素的逆置;最后,需将fis和sed的同步后移动,而此时的thd就起到了保存位置信息的作用,移动后得到fis指向sed所在位置,sed指向thd所在位置,这样循环遍历,最终得到的fis即为结果链表。
(3)详情见下方代码。希望本文对你有所帮助。
算法代码实现如下:
/** * * @param liqq * @return */ public ListNode reverseList(ListNode head) { if (head == null) return null; if (head != null && head.next == null) return head; ListNode fis = head; ListNode sed = head.next; fis.next = null; while (sed != null) { ListNode thd = sed.next; sed.next = fis; fis = sed; sed = thd; } return fis; }
时间: 2024-12-14 06:20:41