链表操作
定义(c语言)
struct ListNode{
int val;
struct ListNode *next;
}ListNode;
切记,使用链表时一定要开辟空间。
struct ListNode *l1 = (struct ListNode *) malloc (sizeof(ListNode));
struct ListNode *p1 = l1;
for(int i = 1;i <= 3; i++)
{
p1->val = i;
p1->next = (struct ListNode *) malloc (sizeof(ListNode));
p1 = p1->next;
}
定义(c++)
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
切记,使用链表时一定要开辟空间。
ListNode *l1 = new ListNode();
for(int i = 1;i <= 3; i++)
{
p1->val = i;
p1->next = new ListNode(i+1);
p1 = p1->next;
}
单向链表反转的四个方式(无代码,只有思想)
假如链表为 1->2->3->4
方法一
另外定义一个指针,取出 2 这个节点,然后将 1 这个节点指向 3, 再将 1 节点挂在 2 节点后面,以此类推。看下方
1->2->3->4 ↓
2->1->3->4 ↓
3->2->1->4 ↓
4->3->2->1
方法二,构造另外一个链表,每次取出一个节点,然后以头插方式插入新链表,新节点变化看下方。
1 ↓
2->1 ↓
3->2->1 ↓
4->3->2->1
方法三,思路如下拆分链表在合并
1->2->3->4
1 2->3->4
2->1 3->4
3->2->1 4
4->3->2->1
方法四,递归遍理如下
第一次,遍历到 4 节点,使其指向 3 节点
第二次,遍理到 3 节点,使其指向 2 节点
以此类推
1->2->3->4
1->2->3<-4
1->2<-3<-4
1<-2<-3<-4