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