关于链表的一些破玩意儿

今天又开始从头复习数据结构,在一本书中(《算法与数据结构——Java语言描述》陈媛,涂飞,卢玲,何波编著)看到了如下的翻转单链表的代码:

package com.zby.test1;

class Node {
	int data;
	Node next;
	Node(int data) {
		this.data = data;
	}
}

public class Invert {
	static Node invert(Node head) {
		Node p, q, r;
		if(head==null||head.next==null){
			System.out.println("逆置的单链表至少有2个节点!");
			return null;
		}
		else {
			p = head;//p指向head所指向的节点
			q = p.next;//q指向p所指向的节点的下一个节点
			while(q!=null) {
				r = q.next;//r指向q所指向的节点的下一个节点
				q.next = p;//q所指向的节点的下一个节点指向p
				p = q;//p指向了q所指向的节点(把q赋给p,意思就是p变成了q)
				q = r;//q指向了r所指向的节点(把r赋给q,意思就是q变成了r)
			}
			head.next = null;//head所指向的节点的下一个节点为空
			head = p;//head指向了p所指向了节点,此时head又变成了头结点
			return head;
		}
	}
}

于是我把代码好好地研究了一番,并写下了注释,我现在是看懂了这个代码。

我自己的心得就是其实指针的意思就是它就是一个标记,代码中的head,p,q,r其实都是标记而已,通过标记来操作链表中的每一个节点。

希望能够给那些对链表指向还有些不太明白的同学带来些帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值