1. 程式人生 > >查詢連結串列中倒數第k個節點,若查詢成功,返回資料域的值

查詢連結串列中倒數第k個節點,若查詢成功,返回資料域的值

有兩種思路:

思路一:首先遍歷一遍連結串列,得到連結串列長度n,然後返回n-k+1個節點的資料域

思路二:定義兩個指標p和q,都指向頭節點的下一個節點,等到p移動到第k個節點,q和p同步移動,等到p移動到連結串列尾時,q指向的就是倒數第k個節點

思路一相當於遍歷兩遍連結串列,思路二則遍歷了一遍連結串列,思路二更優

//找連結串列中倒數第k個位置上的節點,若查詢成功,返回data域的值
	//思路:首先遍歷一遍連結串列,得到連結串列長度n,然後返回n-k+1個節點的資料域
	public int searchK(LinkList L, int k){
		int i=0;
		Node p=L.head;
		while(p!=null){
			i++;
			p=p.next;
		}
		p=L.head;
		int j=0;
		while(j<i-k){
			p=p.next;
			j++;
		}
		return p.data;
	}
	//思路二:定義兩個指標p和q,都指向頭節點的下一個節點,等到p移動到第k個節點,q和p同步移動,
	//等到p移動到連結串列尾時,q指向的就是倒數第k個節點
	public int searchK2(LinkList L, int k){
		Node p=L.head.next;
		Node q=L.head.next;
		int i=0;
		while(i<k){
			i++;
			p=p.next;
		}
		while(p!=null){
			p=p.next;
			q=q.next;
		}
		
		return q.data;
	}