思路1:设置两个指针p1,p2指向表头,p1先走n步。再两个指针同时走。当p1指针指到链表尾部时,P2指针已经在需要删除节点的前一位。一定要注意一些细节。

 class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
} public ListNode removeNthFromEnd(ListNode head, int n) {
if(head==null||n<=0){
return head;
}
ListNode p1=head;
ListNode p2=head; while(n!=0){
if(p1.next!=null){
p1=p1.next;
}else if(n==1){
return head.next;
}else{
return head;
}
n--;
} //两个指针同时移动
while(p1.next!=null){
p1=p1.next;
p2=p2.next;
}
//此时p2指针已经在倒数第n+1位,开始删除倒数第n位
p2.next=p2.next.next;
return head;

思路2:指针p1向前走n-1步,两个指针同时走,p1走到尾节点时,p2到达的节点就是需要删除的节点。此时,可以通过复制后一个元素val给前一个元素,再删除后一个元素即可。实现删除该元素。 要注意细节。

    public ListNode removeNthFromEnd1(ListNode head, int n) {
if(head==null||n<=0){
return head;
}
if(n==1){
//如果删除倒数第一位,则直接删除
if(head.next==null){
return null;
}else{
ListNode h=head;
while(h.next.next!=null){
h=h.next;
}
h.next=null;
return head;
} }
ListNode p1=head;
ListNode p2=head; while(n!=1){
if(p1.next!=null){
p1=p1.next;
}else if(n!=1){ //如果n大于链表长度的情况
return head;
}
n--;
} //两个指针同时移动
while(p1.next!=null){
p1=p1.next;
p2=p2.next;
}
//此时p2指针已经在倒数第n位,开始删除倒数第n位
p2.val=p2.next.val;
p2.next=p2.next.next;
return head;
}

最新文章

  1. linux系统CentOS7
  2. [转]使用EasyRsa3为OpenVPN生成密码
  3. Mysql 定时备份操作
  4. [POJ 2063] Investment (动态规划)
  5. DataTable.Select
  6. jQuery中ajax调用当前页面方法
  7. Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件
  8. struts2之chain的使用
  9. codeforces 546E. Soldier and Traveling 网络流
  10. HashMap 死循环的探究
  11. 微信第三方登录(原生)demo
  12. 树状数组-HDU1541-Stars一维树状数组 POJ1195-Mobile phones-二维树状数组
  13. Python_range
  14. 【问题解决方案】pygame生成的窗口点右上角关闭按钮未响应问题的解决
  15. flink Standalone Cluster
  16. MVC+EF 序列化类型为“System.Data.Entity.DynamicProxies.__的对象时检测到循环引用
  17. 关于Djanggo的环境变量
  18. jquery基础学习之动画篇(四)
  19. Codeforces Round #265 (Div. 2) C. No to Palindromes! 构造不含回文子串的串
  20. 升级Ubuntu 到14.04 64位 后eclipse出现闪退现象

热门文章

  1. git设置远程仓库地址
  2. Netty4.0 用户指南
  3. Mysql 性能监控及调优
  4. php猴子吃桃
  5. TCP/IP详解 卷一(第二章 链路层)
  6. Codeforces Round #243 (Div. 2)——Sereja and Table
  7. dos下连接mysql,显示表结构
  8. 查看本机外网ip地址
  9. React学习之redux
  10. 笔记本中G-Sensor(加速计) M-Sensor 陀螺仪等传感器的区别