标签:两个指针 list turn creat 输出 new expand ati 时移
题目描述
输入一个链表,输出该链表中倒数第k个结点。
1 public static ListNode FindKthToTail(ListNode head,int k) { 2 if(head==null||k<=0){ 3 return null; 4 } 5 Stack<ListNode> stack = new Stack<>(); 6 while (head!=null){ 7 stack.push(head); 8 head=head.next; 9 } 10 if(k>stack.size()){ 11 return null; 12 } 13 while (!((--k) ==0)){ 14 stack.pop(); 15 } 16 ListNode backTh=stack.pop(); 17 return backTh; 18 }
1 //首先定义两个指向链表头的指针p ,q;先令p指向正数第k节点,然后两个指针同时向后移动, 2 //直到p为最后一个,q此时移动了总长度-k个节点,即q指向倒数第k个节点。当k为零或节点为空返回。 3 public static ListNode FindKthToTail01(ListNode head,int k) { 4 ListNode p, q; 5 p = q = head; 6 int i = 0; 7 for (; p != null; i++) { 8 if (i >= k) { 9 q = q.next; 10 } 11 p = p.next; 12 } 13 return i < k ? null : q; 14 }
初始化链表:
1 public static class ListNode{ 2 int val=0; 3 ListNode next=null; 4 public ListNode(int val){ 5 this.val=val; 6 } 7 } 8 public static ListNode createList(int[] list){ 9 ListNode head = new ListNode(-1); 10 ListNode current=head; 11 for(int i=0;i<list.length;i++){ 12 current.next=new ListNode(list[i]); 13 current=current.next; 14 } 15 return head.next; 16 }
测试:
1 public static void main(String[] args) { 2 int[] list={1,2,3,4,5,6}; 3 int k=4; 4 ListNode head= createList(list); 5 ListNode kth = FindKthToTail02(head, k); 6 System.out.println(kth.val); 7 } 8 输出: 3
标签:两个指针 list turn creat 输出 new expand ati 时移
原文地址:https://www.cnblogs.com/Blog-cpc/p/12395244.html