LintCode之链表倒数第n个节点

Posted echo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode之链表倒数第n个节点相关的知识,希望对你有一定的参考价值。

题目描述:

 

我的代码:

 1 /**
 2  * Definition for ListNode.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int val) {
 7  *         this.val = val;
 8  *         this.next = null;
 9  *     }
10  * }
11  */
12 
13 
14 public class Solution {
15     /*
16      * @param head: The first node of linked list.
17      * @param n: An integer
18      * @return: Nth to last node of a singly linked list. 
19      */
20     public ListNode nthToLast(ListNode head, int n) {
21         // write your code here
22         if(head == null) {
23             return null;
24         }
25         ListNode h = new ListNode(-1);
26         //倒置单链表
27         while(head != null) {
28             ListNode node = new ListNode(head.val);
29             if(h.next == null) {
30                 h.next = node;
31             }else {
32                 node.next = h.next;
33                 h.next = node;
34             }
35             if(head.next != null) {
36                 head = head.next;
37             }else {
38                 head = null;
39             }
40         }
41         h = h.next;
42         //取得倒置后的单链表的第n个节点,这个节点就是原链表的倒数第n个节点
43         for(int i=1; i<n; i++) {
44             h = h.next;
45         }
46         ListNode node = new ListNode(h.val);
47         return node;
48     }
49 }

 

总结:因为这是单链表,无法像双链表一样轻松的获得一个节点的前一个节点,所以,我就把这个单链表倒置,倒置后的单链表的第n个节点就是倒置前的单链表的倒数第n个节点,这样就能通过遍历获得倒数第n个节点了。

以上是关于LintCode之链表倒数第n个节点的主要内容,如果未能解决你的问题,请参考以下文章

LintCode 链表倒数第n个节点

LintCode 166. 链表倒数第n个节点

LintCode 174. 删除链表中倒数第n个节点

LintCode 删除链表中倒数第n个节点

LintCode Python 简单级题目 174.删除链表中倒数第n个节点

剑指offer十四之链表中倒数第k个结点