输入一个链表,反转链表后,输出新链表的表头。
解题思路:定义新链表的头结点,循环遍历原链表,将原链表的结点头插到新链表,最后返回新链表的头结点
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null){
return null;
}
ListNode node = null;//定义新链表结点
ListNode cur = null;//定义循环指针
while(head != null){
cur = head.next;//先将原结点的下一个节点保存起来
head.next = node;//对新结点进行赋值,此时原结点的下一个节点会改变
node = head;
head = cur;//让原结点回到循环位置
}
return node;//返回新结点
}
}
今天写题的时候遇到了一个问题,大概意思是说些的程序时间复杂度太大,没有在规定时间完成运行。
总结:避免不必要的判断以及赋值,当然不能频繁new