略
题目:输入一个链表,反转链表后,输出链表的头结点。
分析
看上去很简单,对于每一个结点,如果它的前一个结点不为null,则它的next都改为指向它的前一个结点。但是,要注意的是:当这个结点的next指向前一个结点时,会出现链表的断裂,所以需要在改变next之前记录一下它的下一个结点,当next改变后,把需要操作的那个结点向后移动到刚刚记录的下一个结点。当一个结点的next为null时,那个结点就是尾结点,这时只需要把尾结点的next改变一下循环就可以结束了,最后输出头结点即可。
为了代码的鲁棒性,需要考虑到三种情况:
1. 输入的链表为空
2. 输入的链表仅有一个结点
3. 输入的链表有多个结点
代码实现
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
public class Solution { public ListNode ReverseList(ListNode head) { if(head==null) return null; ListNode newHead = null; ListNode pNode = head; ListNode pPrev = null; while(pNode!=null){ ListNode pNext = pNode.next; if(pNext==null) newHead = pNode; pNode.next = pPrev; pPrev = pNode; pNode = pNext; } return newHead; } }
|
总结
- 没什么说的,考虑到输入的三种情况即是好代码。