1 class Solution { 2 public ListNode removeNthFromEnd(ListNode head, int n) { 3 ListNode h = new ListNode(0, head); //创建链表的头节点 4 int sz = getlen(head); 5 int count = (sz - n + 1); //遍历到count这个位置就可以了 删除的就是count这个节点 6 ListNode cur = h; //因为头节点不能动所以将头节点赋值一个辅助变量来处理 7 8 9 for (int i = 1; i < count; ++i){ //头节点不能动 10 cur = cur.next; //指针的位置 11 } 12 cur.next = cur.next.next; 13 ListNode tou = h.next; 14 return tou; 15 } 16 17 public int getlen(ListNode head){ //定义一个方法获取链表的总长度 18 int len = 0; //链表从0开始计数所以用++len 19 while(head != null){ 20 ++len; 21 head = head.next; //一直移动链表的指针直到指针下一个为空为止,得到链表的长度 22 } 23 return len; 24 } 25 26 27 }
这个题目是我在leetcode上写出来的第一道题目。
题目表述
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
++i 和 i++
i++
会产生一个临时变量,而++i
不会,但是现在据说已经被优化了,没有这个性能问题?
在算法中最大程度上缩短程序运行时间,由于i++的临时变量会使计算机多处理一步,因此占用的时间要比++i要多,这也是在算法for循环中使用++i的区别?。
待定...
参考:for循环的 i++ 和 ++i 的区别 - 知乎 (zhihu.com)
18:35:16