
更多详解www.hensysyw.cn
单向链表的插入图示:---->[NULL](原链表)
head
---->[1]---->[NULL](插入后的链表)
head 1->next
图7 空链表插入一个节点
结合原链表和插入后的链表,就很容易写出相应的代码。 *** 作方法如下:
1、你要明白空链表head指向NULL就是head=NULL;
2、插入后head指向第1个节点,就是让head=1,1->next=NULL,OK这样就行了。
---->[1]---->[2]---->[3]...---->[n]---->[NULL](原链表)
head 1->next 2->next 3->next n->next
---->[1]---->[2]---->[x]---->[3]...---->[n]---->[NULL](插入后的链表)
head 1->next 2->next x->next 3->next n->next
图8:有N个节点的链表,插入一个节点(这里图示插入第2个后面)
结合原链表和插入后的链表,就很容易写出相应的代码。 *** 作方法如下:
1、你要明白原1->next就是节点2,2->next就是节点3;
2、插入后x指向第3个节点,2指向x,就是让x->next=2->next,1->next=x。
*/
struct Node *Insert(struct Node *head, long num, struct Node *node)
{
struct Node *p1 /*p1保存当前需要检查的节点的地址*/
if (head == NULL) /*(结合图示7理解)*/
{
head = node
node->next = NULL
n += 1
return head
}
p1 = head
while (p1->num != num &&p1->next != NULL) /*p1指向的节点不是所要查找的,并且它不是最后一个节点,继续往下找*/
{
p1 = p1->next/*后移一个节点*/
}
if (num == p1->num) /*找到了(结合图示8理解)*/
{
node->next = p1->next/*显然node的下一节点是原p1的next*/
p1->next = node/*插入后,原p1的下一节点就是要插入的node*/
n += 1/*节点总数增加1个*/
}
else
{
printf(" %ld not been found! ",num)
}
return head
}
LinkedList<ArrayList<String>> my = new LinkedList<>()ArrayList<String> strings = new ArrayList<>()
strings.add("s")
strings.add("df")
my.add(strings)
System.out.println(my.toString())
运行结果:
每个链表的元素都是一个数组,这样就可以保存不止一个值了。泛型如果没有上下限,就可以用任何非基本类型去初始化它,所以泛型里面还有泛型也是没问题的。如果把ArrayList换成LinkedList也没问题,能容下多个就行了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)