輸入一個鏈表,反轉鏈表后,輸出鏈表的所有元素。使得只掃描一次鏈表。
思路:兩個指針p,q。p先掃K個,然后p,q同時向后,p到表尾的時候,q所指向的就是倒數k個節點。注意代碼的魯棒性(健壯性)排除異常輸入。
package com.mytest.mymain;class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class FindKthtotail { public static void main(String[] args) { FindKthtotail findKthtotail=new FindKthtotail(); ListNode One =new ListNode(2); ListNode Two =new ListNode(3); ListNode Third =new ListNode(4); ListNode Four =new ListNode(5); ListNode Five =new ListNode(6); One.next=Two; Two.next= Third; Third.next=Four; Four.next=Five; ListNode head=new ListNode(1); head.next=One; ListNode result=findKthtotail.FindKthToTail(head,3); System.out.PRintln(result.val); } public ListNode FindKthToTail(ListNode head, int k) { if (head == null || k <= 0) return null; ListNode pListNode = head, qListNode = head; for (int i = 1; i < k; ++i) { if (pListNode.next != null) { pListNode = pListNode.next; } else { return null; } } while (pListNode.next != null) { qListNode = qListNode.next; pListNode = pListNode.next; } return qListNode; }}
新聞熱點
疑難解答