翻转链表没什么说的,就是注意保存上一个节点和下一个节点的信息。
public Node reverseList(Node head){
Node pReversedHead=null;
Node pNode=head;
Node pPrev=null;
while(pNode!=null){
Node pNext=pNode.next;
if(pNext==null) //特别注意链表中要考虑下一个是否为空
pReversedHead=pNode;
pNode.next=pPrev;
pPrev=pNode;
pNode=pNext;
}
return pReversedHead;
}
求倒数的K个节点,先设置一个指针走到第K-1的位置,再设置一个指针从头开始,然后两个指针一起走,最后就是倒数第K个指针啦。
public Node reGetKthNode(Node head,int k){
if(head==null||k==0)
return null;
Node pBegind=null;
Node paHead=head;
for(int i=0;i<k-1;i++){ //循环到头结点以后的第K个节点
if(paHead!=null)
paHead=paHead.next;
else
return null;
}
pBegind=head;
while(paHead!=null){
paHead=paHead.next;
pBegind=pBegind.next;
}
return pBegind;
}
合并两个有序的链表
public Node mergeSortedListRec(Node head1,Node head2){
if(head1==null)return head2;
if(head2==null)return head1;
if(head1.value>head2.value){
head2.next=mergeSortedListRec(head2.next,head1);
return head2;
}
else{
head1.next=mergeSortedListRec(head1.next,head2);
return head1;
}