剑指offer系列-T16链表中倒数第k个结点

       本人对java语言更熟悉,所以剑指offer代码都是通过Java实现,且涉及的核心代码全部通过牛客网的测试用例检查,感谢牛客网为我检验程序提供了极大帮助!main函数是为了在自己运行程序时,运行结果更直观化。

/**
 * @author xhl
 * 链表中倒数第k个结点
 * 题目描述
 * 输入一个链表,输出该链表中倒数第k个结点。
 * 思路:为避免因改变指针方向导致链表断开,需要保存三个节点,pAhead、point、pBehind
 * 另外要考虑到空链表和只有一个元素的链表(其实是两个节点,带值的节点和null)
 */
public class offerT16 {

	/**
	 * @param args
	 */
	public ListNode ReverseList(ListNode head) {
		if(head==null){
			return null;
		}
		if(head.next==null){
			return head;
		}
		ListNode pAhead=head;
		ListNode point=pAhead.next;
		ListNode pBehind=point.next;
		point.next=pAhead;
		head.next=null;
		
		while(pBehind!=null){
			pAhead=point;
			point=pBehind;
			pBehind=point.next;
			point.next=pAhead;
		}
		return point;
    }
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		offerT16 o = new offerT16();
		ListNode node1 = new ListNode(1);
		ListNode node2 = new ListNode(2);
		ListNode node3 = new ListNode(3);
		ListNode node4 = new ListNode(4);
		ListNode node5 = new ListNode(5);
		node1.next = node2;
		node2.next = node3;
		node3.next = node4;
		node4.next = node5;
		node5.next = null;
		ListNode pnode = o.ReverseList(node1);
		while(pnode!=null){
			System.out.println(pnode.val);
			pnode=pnode.next;
		}
		
	}

}

//因为在offerT5已经定义了class ListNode,同一个包中不能有相同的类名
/*
 * class ListNode {// int value; ListNode next = null;
 * 
 * ListNode(int val) { value = val; } }
 */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值